diff --git a/DEPS b/DEPS index 893522fc..bc63e37 100644 --- a/DEPS +++ b/DEPS
@@ -40,11 +40,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': '1df161ab8a6aac3ca528fd5ffdecd08438889d97', + 'skia_revision': '2c49a4185865140827ac4630e6b63cd03e0ad3bb', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': 'a491782773bf57d1b573f4ce87c5b039df0fb813', + 'v8_revision': '03707bbe71e93513636b7887590823abbe66f221', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other. @@ -64,7 +64,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': '687a79c5ce07bc338192f19d8452edefaf27dd76', + 'pdfium_revision': 'e818bcba7e036d7e1dc8f282a88022b814dbfb40', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling openmax_dl # and whatever else without interference from each other. @@ -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': 'f25bfea25223277cb04abf0eef039f35f280c987', + 'catapult_revision': 'c50cbdedf9a36a08ef7f2bb584625332f1a9592f', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -205,7 +205,7 @@ Var('chromium_git') + '/webm/libvpx.git' + '@' + '164db8278f68a5ab376500ed6aad99ef7da3e9b0', 'src/third_party/ffmpeg': - Var('chromium_git') + '/chromium/third_party/ffmpeg.git' + '@' + '239c9f9e275486c051f3313efb6725968bb9a004', + Var('chromium_git') + '/chromium/third_party/ffmpeg.git' + '@' + 'a77cdbfeb7b629eb3a5012d7c6c94ef11e0488be', 'src/third_party/usrsctp/usrsctplib': Var('chromium_git') + '/external/github.com/sctplab/usrsctp' + '@' + '8679f2b0bf063ac894dc473debefd61dbbebf622',
diff --git a/ash/common/accelerators/ash_focus_manager_factory.cc b/ash/common/accelerators/ash_focus_manager_factory.cc index 2810ff5..058e0575 100644 --- a/ash/common/accelerators/ash_focus_manager_factory.cc +++ b/ash/common/accelerators/ash_focus_manager_factory.cc
@@ -6,6 +6,7 @@ #include "ash/common/accelerators/accelerator_controller.h" #include "ash/common/wm_shell.h" +#include "base/memory/ptr_util.h" #include "ui/views/focus/focus_manager.h" namespace ash { @@ -16,7 +17,9 @@ views::FocusManager* AshFocusManagerFactory::CreateFocusManager( views::Widget* widget, bool desktop_widget) { - return new views::FocusManager(widget, desktop_widget ? NULL : new Delegate); + return new views::FocusManager( + widget, + desktop_widget ? nullptr : base::WrapUnique<Delegate>(new Delegate)); } bool AshFocusManagerFactory::Delegate::ProcessAccelerator(
diff --git a/base/BUILD.gn b/base/BUILD.gn index 99017c74..805b7a1d3 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -2019,6 +2019,7 @@ "optional_unittest.cc", "os_compat_android_unittest.cc", "path_service_unittest.cc", + "pending_task_unittest.cc", "pickle_unittest.cc", "posix/file_descriptor_shuffle_unittest.cc", "posix/unix_domain_socket_linux_unittest.cc",
diff --git a/base/debug/task_annotator.cc b/base/debug/task_annotator.cc index 437d69a7..46969f2 100644 --- a/base/debug/task_annotator.cc +++ b/base/debug/task_annotator.cc
@@ -4,6 +4,8 @@ #include "base/debug/task_annotator.h" +#include <array> + #include "base/debug/activity_tracker.h" #include "base/debug/alias.h" #include "base/pending_task.h" @@ -41,13 +43,18 @@ TRACE_ID_MANGLE(GetTaskTraceID(*pending_task)), TRACE_EVENT_FLAG_FLOW_IN, "queue_duration", queue_duration.InMilliseconds()); - // Before running the task, store the program counter where it was posted - // and deliberately alias it to ensure it is on the stack if the task - // crashes. Be careful not to assume that the variable itself will have the - // expected value when displayed by the optimizer in an optimized build. - // Look at a memory dump of the stack. - const void* program_counter = pending_task->posted_from.program_counter(); - debug::Alias(&program_counter); + // Before running the task, store the task backtrace with the chain of + // PostTasks that resulted in this call and deliberately alias it to ensure + // it is on the stack if the task crashes. Be careful not to assume that the + // variable itself will have the expected value when displayed by the + // optimizer in an optimized build. Look at a memory dump of the stack. + static constexpr int kStackTaskTraceSnapshotSize = + std::tuple_size<decltype(pending_task->task_backtrace)>::value + 1; + std::array<const void*, kStackTaskTraceSnapshotSize> task_backtrace; + task_backtrace[0] = pending_task->posted_from.program_counter(); + std::copy(pending_task->task_backtrace.begin(), + pending_task->task_backtrace.end(), task_backtrace.begin() + 1); + debug::Alias(&task_backtrace); std::move(pending_task->task).Run();
diff --git a/base/message_loop/incoming_task_queue.cc b/base/message_loop/incoming_task_queue.cc index c32afda1..c7faa9a 100644 --- a/base/message_loop/incoming_task_queue.cc +++ b/base/message_loop/incoming_task_queue.cc
@@ -67,8 +67,8 @@ << "Requesting super-long task delay period of " << delay.InSeconds() << " seconds from here: " << from_here.ToString(); - PendingTask pending_task( - from_here, task, CalculateDelayedRuntime(delay), nestable); + PendingTask pending_task(from_here, task, CalculateDelayedRuntime(delay), + nestable); #if defined(OS_WIN) // We consider the task needs a high resolution timer if the delay is // more than 0 and less than 32ms. This caps the relative error to
diff --git a/base/message_loop/message_loop.cc b/base/message_loop/message_loop.cc index 72185a8..60df713 100644 --- a/base/message_loop/message_loop.cc +++ b/base/message_loop/message_loop.cc
@@ -320,7 +320,8 @@ #endif nestable_tasks_allowed_(true), pump_factory_(pump_factory), - run_loop_(NULL), + run_loop_(nullptr), + current_pending_task_(nullptr), incoming_task_queue_(new internal::IncomingTaskQueue(this)), unbound_task_runner_( new internal::MessageLoopTaskRunner(incoming_task_queue_)), @@ -403,6 +404,7 @@ void MessageLoop::RunTask(PendingTask* pending_task) { DCHECK(nestable_tasks_allowed_); + current_pending_task_ = pending_task; #if defined(OS_WIN) if (pending_task->is_high_res) { @@ -423,6 +425,8 @@ observer.DidProcessTask(*pending_task); nestable_tasks_allowed_ = true; + + current_pending_task_ = nullptr; } bool MessageLoop::DeferOrRunPendingTask(PendingTask pending_task) {
diff --git a/base/message_loop/message_loop.h b/base/message_loop/message_loop.h index 91a7b1d3..8417ce49c 100644 --- a/base/message_loop/message_loop.h +++ b/base/message_loop/message_loop.h
@@ -346,11 +346,13 @@ void BindToCurrentThread(); private: - friend class RunLoop; friend class internal::IncomingTaskQueue; + friend class RunLoop; friend class ScheduleWorkTest; friend class Thread; + friend struct PendingTask; FRIEND_TEST_ALL_PREFIXES(MessageLoopTest, DeleteUnboundLoop); + friend class PendingTaskTest; // Creates a MessageLoop without binding to a thread. // If |type| is TYPE_CUSTOM non-null |pump_factory| must be also given @@ -450,6 +452,13 @@ debug::TaskAnnotator task_annotator_; + // Used to allow creating a breadcrumb of program counters in PostTask. + // This variable is only initialized while a task is being executed and is + // meant only to store context for creating a backtrace breadcrumb. Do not + // attach other semantics to it without thinking through the use caes + // thoroughly. + const PendingTask* current_pending_task_; + scoped_refptr<internal::IncomingTaskQueue> incoming_task_queue_; // A task runner which we haven't bound to a thread yet.
diff --git a/base/pending_task.cc b/base/pending_task.cc index cca9ebf..b2f95b4 100644 --- a/base/pending_task.cc +++ b/base/pending_task.cc
@@ -4,18 +4,14 @@ #include "base/pending_task.h" +#include "base/message_loop/message_loop.h" #include "base/tracked_objects.h" namespace base { PendingTask::PendingTask(const tracked_objects::Location& posted_from, OnceClosure task) - : base::TrackingInfo(posted_from, TimeTicks()), - task(std::move(task)), - posted_from(posted_from), - sequence_num(0), - nestable(true), - is_high_res(false) {} + : PendingTask(posted_from, std::move(task), TimeTicks(), true) {} PendingTask::PendingTask(const tracked_objects::Location& posted_from, OnceClosure task, @@ -26,7 +22,19 @@ posted_from(posted_from), sequence_num(0), nestable(nestable), - is_high_res(false) {} + is_high_res(false) { + const PendingTask* parent_task = + MessageLoop::current() ? MessageLoop::current()->current_pending_task_ + : nullptr; + if (parent_task) { + task_backtrace[0] = parent_task->posted_from.program_counter(); + std::copy(parent_task->task_backtrace.begin(), + parent_task->task_backtrace.end() - 1, + task_backtrace.begin() + 1); + } else { + task_backtrace.fill(nullptr); + } +} PendingTask::PendingTask(PendingTask&& other) = default;
diff --git a/base/pending_task.h b/base/pending_task.h index a55fa518..7f3fccd8 100644 --- a/base/pending_task.h +++ b/base/pending_task.h
@@ -5,6 +5,7 @@ #ifndef BASE_PENDING_TASK_H_ #define BASE_PENDING_TASK_H_ +#include <array> #include <queue> #include "base/base_export.h" @@ -37,6 +38,9 @@ // The site this PendingTask was posted from. tracked_objects::Location posted_from; + // Task backtrace. + std::array<const void*, 4> task_backtrace; + // Secondary sort key for run time. int sequence_num;
diff --git a/base/pending_task_unittest.cc b/base/pending_task_unittest.cc new file mode 100644 index 0000000..8d52daa9 --- /dev/null +++ b/base/pending_task_unittest.cc
@@ -0,0 +1,169 @@ +// Copyright (c) 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 "base/pending_task.h" + +#include <vector> + +#include "base/bind.h" +#include "base/message_loop/message_loop.h" +#include "base/run_loop.h" +#include "base/strings/stringprintf.h" +#include "base/threading/thread.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace base { + +class PendingTaskTest : public ::testing::Test { + public: + PendingTaskTest() = default; + + ~PendingTaskTest() override = default; + + protected: + using ExpectedTrace = std::vector<const void*>; + + static void VerifyTraceAndPost( + const scoped_refptr<TaskRunner>& task_runner, + const tracked_objects::Location& posted_from, + const tracked_objects::Location& next_from_here, + const std::vector<const void*>& expected_trace, + Closure task) { + SCOPED_TRACE(StringPrintf("Callback Depth: %zu", expected_trace.size())); + + // Beyond depth + 1, the trace is nonsensical because there haven't been + // enough nested tasks called. + const PendingTask* current_pending_task = + MessageLoop::current()->current_pending_task_; + size_t window = std::min(current_pending_task->task_backtrace.size(), + expected_trace.size()); + + EXPECT_EQ(posted_from, + MessageLoop::current()->current_pending_task_->posted_from); + for (size_t i = 0; i < window; i++) { + SCOPED_TRACE(StringPrintf("Trace frame: %zu", i)); + EXPECT_EQ(expected_trace[i], current_pending_task->task_backtrace[i]); + } + task_runner->PostTask(next_from_here, std::move(task)); + } + + static void RunTwo(Closure c1, Closure c2) { + c1.Run(); + c2.Run(); + } +}; + +// Ensure the task backtrace populates correctly. +TEST_F(PendingTaskTest, SingleThreadedSimple) { + MessageLoop loop; + const tracked_objects::Location& location0 = FROM_HERE; + const tracked_objects::Location& location1 = FROM_HERE; + const tracked_objects::Location& location2 = FROM_HERE; + const tracked_objects::Location& location3 = FROM_HERE; + const tracked_objects::Location& location4 = FROM_HERE; + const tracked_objects::Location& location5 = FROM_HERE; + + Closure task5 = Bind( + &PendingTaskTest::VerifyTraceAndPost, loop.task_runner(), location4, + location5, + ExpectedTrace({location3.program_counter(), location2.program_counter(), + location1.program_counter(), location0.program_counter()}), + Bind(&DoNothing)); + Closure task4 = Bind( + &PendingTaskTest::VerifyTraceAndPost, loop.task_runner(), location3, + location4, + ExpectedTrace({location2.program_counter(), location1.program_counter(), + location0.program_counter(), nullptr}), + task5); + Closure task3 = Bind( + &PendingTaskTest::VerifyTraceAndPost, loop.task_runner(), location2, + location3, ExpectedTrace({location1.program_counter(), + location0.program_counter(), nullptr, nullptr}), + task4); + Closure task2 = + Bind(&PendingTaskTest::VerifyTraceAndPost, loop.task_runner(), location1, + location2, ExpectedTrace({location0.program_counter()}), task3); + Closure task1 = Bind(&PendingTaskTest::VerifyTraceAndPost, loop.task_runner(), + location0, location1, ExpectedTrace({}), task2); + + loop.task_runner()->PostTask(location0, task1); + + RunLoop().RunUntilIdle(); +} + +// Post a task onto another thread. Ensure on the other thread, it has the +// right stack trace. +TEST_F(PendingTaskTest, MultipleThreads) { + MessageLoop loop; // Implicitly "thread a." + Thread thread_b("pt_test_b"); + Thread thread_c("pt_test_c"); + thread_b.StartAndWaitForTesting(); + thread_c.StartAndWaitForTesting(); + + const tracked_objects::Location& location_a0 = FROM_HERE; + const tracked_objects::Location& location_a1 = FROM_HERE; + const tracked_objects::Location& location_a2 = FROM_HERE; + const tracked_objects::Location& location_a3 = FROM_HERE; + + const tracked_objects::Location& location_b0 = FROM_HERE; + const tracked_objects::Location& location_b1 = FROM_HERE; + + const tracked_objects::Location& location_c0 = FROM_HERE; + + // On thread c, post a task back to thread a that verifies its trace + // and terminates after one more self-post. + Closure task_a2 = + Bind(&PendingTaskTest::VerifyTraceAndPost, loop.task_runner(), + location_a2, location_a3, + ExpectedTrace( + {location_c0.program_counter(), location_b0.program_counter(), + location_a1.program_counter(), location_a0.program_counter()}), + Bind(&DoNothing)); + Closure task_c0 = Bind(&PendingTaskTest::VerifyTraceAndPost, + loop.task_runner(), location_c0, location_a2, + ExpectedTrace({location_b0.program_counter(), + location_a1.program_counter(), + location_a0.program_counter()}), + task_a2); + + // On thread b run two tasks that conceptually come from the same location + // (managed via RunTwo().) One will post back to thread b and another will + // post to thread c to test spawning multiple tasks on different message + // loops. The task posted to thread c will not get location b1 whereas the + // one posted back to thread b will. + Closure task_b0_fork = + Bind(&PendingTaskTest::VerifyTraceAndPost, + thread_c.message_loop()->task_runner(), location_b0, location_c0, + ExpectedTrace({location_a1.program_counter(), + location_a0.program_counter(), nullptr}), + task_c0); + Closure task_b0_local = + Bind(&PendingTaskTest::VerifyTraceAndPost, + thread_b.message_loop()->task_runner(), location_b0, location_b1, + ExpectedTrace({location_a1.program_counter(), + location_a0.program_counter(), nullptr}), + Bind(&DoNothing)); + + // Push one frame onto the stack in thread a then pass to thread b. + Closure task_a1 = + Bind(&PendingTaskTest::VerifyTraceAndPost, + thread_b.message_loop()->task_runner(), location_a1, location_b0, + ExpectedTrace({location_a0.program_counter(), nullptr}), + Bind(&PendingTaskTest::RunTwo, task_b0_local, task_b0_fork)); + Closure task_a0 = + Bind(&PendingTaskTest::VerifyTraceAndPost, loop.task_runner(), + location_a0, location_a1, ExpectedTrace({nullptr}), task_a1); + + loop.task_runner()->PostTask(location_a0, task_a0); + + RunLoop().RunUntilIdle(); + + thread_b.FlushForTesting(); + thread_b.Stop(); + + thread_c.FlushForTesting(); + thread_c.Stop(); +} + +} // namespace base
diff --git a/base/trace_event/memory_infra_background_whitelist.cc b/base/trace_event/memory_infra_background_whitelist.cc index f056d2b..9230fe5 100644 --- a/base/trace_event/memory_infra_background_whitelist.cc +++ b/base/trace_event/memory_infra_background_whitelist.cc
@@ -35,6 +35,7 @@ "V8Isolate", "WinHeap", "SyncDirectory", + "TabRestoreServiceHelper", nullptr // End of list marker. }; @@ -125,6 +126,9 @@ "sync/0x?/model_type/TYPED_URL", "sync/0x?/model_type/WALLET_METADATA", "sync/0x?/model_type/WIFI_CREDENTIAL", + "tab_restore/service_helper_0x?/entries", + "tab_restore/service_helper_0x?/entries/tab_0x?", + "tab_restore/service_helper_0x?/entries/window_0x?", nullptr // End of list marker. };
diff --git a/build_overrides/v8.gni b/build_overrides/v8.gni deleted file mode 100644 index d67fd16..0000000 --- a/build_overrides/v8.gni +++ /dev/null
@@ -1,8 +0,0 @@ -# Copyright 2015 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. - -# This file should be empty. - -# TODO(brettw) http://crbug.com/684096 Remove this when all callers are updated -# to use the new build overrides system.
diff --git a/cc/BUILD.gn b/cc/BUILD.gn index 919be277..1d17fc8 100644 --- a/cc/BUILD.gn +++ b/cc/BUILD.gn
@@ -881,6 +881,7 @@ "animation/transform_operations_unittest.cc", # Surfaces test files. + "surfaces/compositor_frame_sink_support_unittest.cc", "surfaces/direct_compositor_frame_sink_unittest.cc", "surfaces/display_scheduler_unittest.cc", "surfaces/display_unittest.cc",
diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc index 5f777af..b02fb5b 100644 --- a/cc/layers/layer.cc +++ b/cc/layers/layer.cc
@@ -600,10 +600,6 @@ } bool Layer::IsContainerForFixedPositionLayers() const { - if (!inputs_.transform.IsIdentityOrTranslation()) - return true; - if (parent_ && !parent_->inputs_.transform.IsIdentityOrTranslation()) - return true; return inputs_.is_container_for_fixed_position_layers; }
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc index 4f6bfdb..ee0a6c84 100644 --- a/cc/layers/picture_layer_impl.cc +++ b/cc/layers/picture_layer_impl.cc
@@ -354,7 +354,6 @@ texture_rect, draw_info.resource_size(), draw_info.contents_swizzled(), nearest_neighbor_); ValidateQuadResources(quad); - iter->draw_info().set_was_ever_used_to_draw(); has_draw_quad = true; break; } @@ -364,7 +363,6 @@ quad->SetNew(shared_quad_state, geometry_rect, visible_geometry_rect, draw_info.solid_color(), false); ValidateQuadResources(quad); - iter->draw_info().set_was_ever_used_to_draw(); has_draw_quad = true; break; }
diff --git a/cc/raster/staging_buffer_pool.cc b/cc/raster/staging_buffer_pool.cc index ef78e4d..6fa0fe0 100644 --- a/cc/raster/staging_buffer_pool.cc +++ b/cc/raster/staging_buffer_pool.cc
@@ -432,24 +432,10 @@ } } -void StagingBufferPool::OnMemoryStateChange(base::MemoryState state) { - switch (state) { - case base::MemoryState::NORMAL: - // TODO(tasak): go back to normal state. - break; - case base::MemoryState::THROTTLED: - // TODO(tasak): make the limits of this component's caches smaller to - // save memory usage. - break; - case base::MemoryState::SUSPENDED: { - base::AutoLock lock(lock_); - // Release all buffers, regardless of how recently they were used. - ReleaseBuffersNotUsedSince(base::TimeTicks() + base::TimeDelta::Max()); - } break; - case base::MemoryState::UNKNOWN: - // NOT_REACHED. - break; - } +void StagingBufferPool::OnPurgeMemory() { + base::AutoLock lock(lock_); + // Release all buffers, regardless of how recently they were used. + ReleaseBuffersNotUsedSince(base::TimeTicks() + base::TimeDelta::Max()); } } // namespace cc
diff --git a/cc/raster/staging_buffer_pool.h b/cc/raster/staging_buffer_pool.h index 528d031..32edc4f 100644 --- a/cc/raster/staging_buffer_pool.h +++ b/cc/raster/staging_buffer_pool.h
@@ -90,7 +90,7 @@ base::trace_event::TracedValue* staging_state) const; // Overriden from base::MemoryCoordinatorClient. - void OnMemoryStateChange(base::MemoryState state) override; + void OnPurgeMemory() override; scoped_refptr<base::SequencedTaskRunner> task_runner_; ContextProvider* const worker_context_provider_;
diff --git a/cc/raster/synchronous_task_graph_runner.cc b/cc/raster/synchronous_task_graph_runner.cc index f9c0a65b..daadbce 100644 --- a/cc/raster/synchronous_task_graph_runner.cc +++ b/cc/raster/synchronous_task_graph_runner.cc
@@ -67,6 +67,9 @@ } bool SynchronousTaskGraphRunner::RunTask() { + // Since we do not have posted from location for tasks, record the context for + // tasks as "cc" in heap profiler. + TRACE_HEAP_PROFILER_API_SCOPED_TASK_EXECUTION scoped_event("cc"); TRACE_EVENT0("toplevel", "SynchronousTaskGraphRunner::RunTask"); // Find the first category with any tasks to run. This task graph runner
diff --git a/cc/resources/resource_pool.cc b/cc/resources/resource_pool.cc index 61a7ae3..c200375 100644 --- a/cc/resources/resource_pool.cc +++ b/cc/resources/resource_pool.cc
@@ -480,23 +480,9 @@ return true; } -void ResourcePool::OnMemoryStateChange(base::MemoryState state) { - switch (state) { - case base::MemoryState::NORMAL: - // TODO(tasak): go back to normal state. - break; - case base::MemoryState::THROTTLED: - // TODO(tasak): make the limits of this component's caches smaller to - // save memory usage. - break; - case base::MemoryState::SUSPENDED: - // Release all resources, regardless of how recently they were used. - EvictResourcesNotUsedSince(base::TimeTicks() + base::TimeDelta::Max()); - break; - case base::MemoryState::UNKNOWN: - // NOT_REACHED. - break; - } +void ResourcePool::OnPurgeMemory() { + // Release all resources, regardless of how recently they were used. + EvictResourcesNotUsedSince(base::TimeTicks() + base::TimeDelta::Max()); } } // namespace cc
diff --git a/cc/resources/resource_pool.h b/cc/resources/resource_pool.h index b7c43e7..5f387ea 100644 --- a/cc/resources/resource_pool.h +++ b/cc/resources/resource_pool.h
@@ -85,7 +85,7 @@ base::trace_event::ProcessMemoryDump* pmd) override; // Overriden from base::MemoryCoordinatorClient. - void OnMemoryStateChange(base::MemoryState state) override; + void OnPurgeMemory() override; size_t GetTotalMemoryUsageForTesting() const { return total_memory_usage_bytes_;
diff --git a/cc/resources/resource_pool_unittest.cc b/cc/resources/resource_pool_unittest.cc index 3b1c5b7..aa8e853e 100644 --- a/cc/resources/resource_pool_unittest.cc +++ b/cc/resources/resource_pool_unittest.cc
@@ -353,7 +353,8 @@ EXPECT_EQ(1u, resource_pool_->GetTotalResourceCountForTesting()); EXPECT_EQ(0u, resource_pool_->GetBusyResourceCountForTesting()); - // Suspending should not impact an in-use resource. + // Purging and suspending should not impact an in-use resource. + resource_pool_->OnPurgeMemory(); resource_pool_->OnMemoryStateChange(base::MemoryState::SUSPENDED); EXPECT_EQ(1u, resource_pool_->GetTotalResourceCountForTesting()); EXPECT_EQ(0u, resource_pool_->GetBusyResourceCountForTesting()); @@ -364,7 +365,8 @@ EXPECT_EQ(1u, resource_pool_->GetTotalResourceCountForTesting()); EXPECT_EQ(1u, resource_pool_->GetBusyResourceCountForTesting()); - // Suspending should now free the busy resource. + // Purging and suspending should now free the busy resource. + resource_pool_->OnPurgeMemory(); resource_pool_->OnMemoryStateChange(base::MemoryState::SUSPENDED); EXPECT_EQ(0u, resource_pool_->GetTotalResourceCountForTesting()); EXPECT_EQ(0u, resource_pool_->GetBusyResourceCountForTesting());
diff --git a/cc/surfaces/compositor_frame_sink_support.h b/cc/surfaces/compositor_frame_sink_support.h index 7351723..cfdd0a2 100644 --- a/cc/surfaces/compositor_frame_sink_support.h +++ b/cc/surfaces/compositor_frame_sink_support.h
@@ -42,6 +42,10 @@ const FrameSinkId& frame_sink_id() const { return frame_sink_id_; } + Surface* current_surface_for_testing() { + return surface_factory_.current_surface_for_testing(); + } + void EvictFrame(); void SetNeedsBeginFrame(bool needs_begin_frame); void SubmitCompositorFrame(const LocalSurfaceId& local_surface_id,
diff --git a/cc/surfaces/compositor_frame_sink_support_unittest.cc b/cc/surfaces/compositor_frame_sink_support_unittest.cc new file mode 100644 index 0000000..6a49fce --- /dev/null +++ b/cc/surfaces/compositor_frame_sink_support_unittest.cc
@@ -0,0 +1,391 @@ +// 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 "cc/surfaces/compositor_frame_sink_support.h" + +#include "base/macros.h" +#include "cc/output/compositor_frame.h" +#include "cc/surfaces/compositor_frame_sink_support_client.h" +#include "cc/surfaces/frame_sink_id.h" +#include "cc/surfaces/surface_id.h" +#include "cc/test/begin_frame_args_test.h" +#include "cc/test/fake_external_begin_frame_source.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +using testing::UnorderedElementsAre; +using testing::IsEmpty; +using testing::SizeIs; + +namespace cc { +namespace test { +namespace { + +constexpr FrameSinkId kParentFrameSink(2, 1); +constexpr FrameSinkId kChildFrameSink1(65563, 1); +constexpr FrameSinkId kChildFrameSink2(65564, 1); +constexpr FrameSinkId kArbitraryFrameSink(1337, 7331); + +std::vector<SurfaceId> empty_surface_ids() { + return std::vector<SurfaceId>(); +} + +SurfaceId MakeSurfaceId(const FrameSinkId& frame_sink_id, uint32_t local_id) { + return SurfaceId( + frame_sink_id, + LocalSurfaceId(local_id, base::UnguessableToken::Deserialize(0, 1u))); +} + +CompositorFrame MakeCompositorFrame( + std::vector<SurfaceId> referenced_surfaces) { + CompositorFrame compositor_frame; + compositor_frame.metadata.referenced_surfaces = + std::move(referenced_surfaces); + return compositor_frame; +} + +} // namespace + +class CompositorFrameSinkSupportTest : public testing::Test, + public CompositorFrameSinkSupportClient { + public: + CompositorFrameSinkSupportTest() {} + ~CompositorFrameSinkSupportTest() override {} + + CompositorFrameSinkSupport& parent_support() { return *supports_[0]; } + Surface* parent_surface() { + return parent_support().current_surface_for_testing(); + } + + CompositorFrameSinkSupport& child_support1() { return *supports_[1]; } + Surface* child_surface1() { + return child_support1().current_surface_for_testing(); + } + + CompositorFrameSinkSupport& child_support2() { return *supports_[2]; } + Surface* child_surface2() { + return child_support2().current_surface_for_testing(); + } + + CompositorFrameSinkSupport& support(int index) { return *supports_[index]; } + Surface* surface(int index) { + return support(index).current_surface_for_testing(); + } + + SurfaceManager& surface_manager() { return surface_manager_; } + + SurfaceDependencyTracker& dependency_tracker() { + return *surface_manager_.dependency_tracker(); + } + + FakeExternalBeginFrameSource* begin_frame_source() { + return begin_frame_source_.get(); + } + + // testing::Test: + void SetUp() override { + testing::Test::SetUp(); + begin_frame_source_ = + base::MakeUnique<FakeExternalBeginFrameSource>(0.f, false); + std::unique_ptr<SurfaceDependencyTracker> dependency_tracker( + new SurfaceDependencyTracker(&surface_manager_, + begin_frame_source_.get())); + surface_manager_.SetDependencyTracker(std::move(dependency_tracker)); + supports_.push_back(base::MakeUnique<CompositorFrameSinkSupport>( + this, &surface_manager_, kParentFrameSink, nullptr /* display */, + nullptr /* display_begin_frame_source */)); + supports_.push_back(base::MakeUnique<CompositorFrameSinkSupport>( + this, &surface_manager_, kChildFrameSink1, nullptr /* display */, + nullptr /* display_begin_frame_source */)); + supports_.push_back(base::MakeUnique<CompositorFrameSinkSupport>( + this, &surface_manager_, kChildFrameSink2, nullptr /* display */, + nullptr /* display_begin_frame_source */)); + } + + void TearDown() override { + surface_manager_.SetDependencyTracker(nullptr); + begin_frame_source_.reset(); + supports_.clear(); + } + + // CompositorFrameSinkSupportClient implementation. + void DidReceiveCompositorFrameAck() override {} + void OnBeginFrame(const BeginFrameArgs& args) override {} + void ReclaimResources(const ReturnedResourceArray& resources) override {} + void WillDrawSurface() override {} + + private: + SurfaceManager surface_manager_; + std::unique_ptr<FakeExternalBeginFrameSource> begin_frame_source_; + std::vector<std::unique_ptr<CompositorFrameSinkSupport>> supports_; + + DISALLOW_COPY_AND_ASSIGN(CompositorFrameSinkSupportTest); +}; + +// The parent Surface is blocked on |child_id1| and |child_id2|. +TEST_F(CompositorFrameSinkSupportTest, DisplayCompositorLockingBlockedOnTwo) { + const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1); + const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1); + const SurfaceId child_id2 = MakeSurfaceId(kChildFrameSink2, 1); + + parent_support().SubmitCompositorFrame( + parent_id.local_surface_id(), + MakeCompositorFrame({child_id1, child_id2})); + + // parent_support is blocked on |child_id1| and |child_id2|. + EXPECT_TRUE(dependency_tracker().has_deadline()); + EXPECT_FALSE(parent_surface()->HasActiveFrame()); + EXPECT_TRUE(parent_surface()->HasPendingFrame()); + EXPECT_THAT(parent_surface()->blocking_surfaces_for_testing(), + UnorderedElementsAre(child_id1, child_id2)); + + // Submit a CompositorFrame without any dependencies to |child_id1|. + // parent_support should now only be blocked on |child_id2|. + child_support1().SubmitCompositorFrame( + child_id1.local_surface_id(), MakeCompositorFrame(empty_surface_ids())); + + EXPECT_TRUE(dependency_tracker().has_deadline()); + EXPECT_FALSE(parent_surface()->HasActiveFrame()); + EXPECT_TRUE(parent_surface()->HasPendingFrame()); + EXPECT_THAT(parent_surface()->blocking_surfaces_for_testing(), + UnorderedElementsAre(child_id2)); + + // Submit a CompositorFrame without any dependencies to |child_id2|. + // parent_support should be activated. + child_support2().SubmitCompositorFrame( + child_id2.local_surface_id(), MakeCompositorFrame(empty_surface_ids())); + + EXPECT_FALSE(dependency_tracker().has_deadline()); + EXPECT_TRUE(parent_surface()->HasActiveFrame()); + EXPECT_FALSE(parent_surface()->HasPendingFrame()); + EXPECT_THAT(parent_surface()->blocking_surfaces_for_testing(), IsEmpty()); +} + +// The parent Surface is blocked on |child_id2| which is blocked on |child_id3|. +TEST_F(CompositorFrameSinkSupportTest, DisplayCompositorLockingBlockedChain) { + const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1); + const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1); + const SurfaceId child_id2 = MakeSurfaceId(kChildFrameSink2, 1); + + parent_support().SubmitCompositorFrame(parent_id.local_surface_id(), + MakeCompositorFrame({child_id1})); + + // parent_support is blocked on |child_id1|. + EXPECT_TRUE(dependency_tracker().has_deadline()); + EXPECT_FALSE(parent_surface()->HasActiveFrame()); + EXPECT_TRUE(parent_surface()->HasPendingFrame()); + EXPECT_THAT(parent_surface()->blocking_surfaces_for_testing(), + UnorderedElementsAre(child_id1)); + + child_support1().SubmitCompositorFrame(child_id1.local_surface_id(), + MakeCompositorFrame({child_id2})); + + // child_support1 should now be blocked on |child_id2|. + EXPECT_TRUE(dependency_tracker().has_deadline()); + EXPECT_FALSE(child_surface1()->HasActiveFrame()); + EXPECT_TRUE(child_surface1()->HasPendingFrame()); + EXPECT_THAT(child_surface1()->blocking_surfaces_for_testing(), + UnorderedElementsAre(child_id2)); + + // The parent should still be blocked on |child_id1| because it's pending. + EXPECT_THAT(parent_surface()->blocking_surfaces_for_testing(), + UnorderedElementsAre(child_id1)); + + // Submit a CompositorFrame without any dependencies to |child_id2|. + // parent_support should be activated. + child_support2().SubmitCompositorFrame( + child_id2.local_surface_id(), MakeCompositorFrame(empty_surface_ids())); + + EXPECT_FALSE(dependency_tracker().has_deadline()); + + // child_surface1 should now be active. + EXPECT_TRUE(child_surface1()->HasActiveFrame()); + EXPECT_FALSE(child_surface1()->HasPendingFrame()); + EXPECT_THAT(child_surface1()->blocking_surfaces_for_testing(), IsEmpty()); + + // parent_surface should now be active. + EXPECT_TRUE(parent_surface()->HasActiveFrame()); + EXPECT_FALSE(parent_surface()->HasPendingFrame()); + EXPECT_THAT(parent_surface()->blocking_surfaces_for_testing(), IsEmpty()); +} + +// parent_surface and child_surface1 are blocked on |child_id2|. +TEST_F(CompositorFrameSinkSupportTest, + DisplayCompositorLockingTwoBlockedOnOne) { + const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1); + const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1); + const SurfaceId child_id2 = MakeSurfaceId(kChildFrameSink2, 1); + + parent_support().SubmitCompositorFrame(parent_id.local_surface_id(), + MakeCompositorFrame({child_id2})); + + // parent_support is blocked on |child_id2|. + EXPECT_TRUE(dependency_tracker().has_deadline()); + EXPECT_FALSE(parent_surface()->HasActiveFrame()); + EXPECT_TRUE(parent_surface()->HasPendingFrame()); + EXPECT_THAT(parent_surface()->blocking_surfaces_for_testing(), + UnorderedElementsAre(child_id2)); + + // child_support1 should now be blocked on |child_id2|. + child_support1().SubmitCompositorFrame(child_id1.local_surface_id(), + MakeCompositorFrame({child_id2})); + + EXPECT_TRUE(dependency_tracker().has_deadline()); + EXPECT_FALSE(child_surface1()->HasActiveFrame()); + EXPECT_TRUE(child_surface1()->HasPendingFrame()); + EXPECT_THAT(child_surface1()->blocking_surfaces_for_testing(), + UnorderedElementsAre(child_id2)); + + // The parent should still be blocked on |child_id2|. + EXPECT_THAT(parent_surface()->blocking_surfaces_for_testing(), + UnorderedElementsAre(child_id2)); + + // Submit a CompositorFrame without any dependencies to |child_id2|. + // parent_support should be activated. + child_support2().SubmitCompositorFrame( + child_id2.local_surface_id(), MakeCompositorFrame(empty_surface_ids())); + + EXPECT_FALSE(dependency_tracker().has_deadline()); + + // child_surface1 should now be active. + EXPECT_TRUE(child_surface1()->HasActiveFrame()); + EXPECT_FALSE(child_surface1()->HasPendingFrame()); + EXPECT_THAT(child_surface1()->blocking_surfaces_for_testing(), IsEmpty()); + + // parent_surface should now be active. + EXPECT_TRUE(parent_surface()->HasActiveFrame()); + EXPECT_FALSE(parent_surface()->HasPendingFrame()); + EXPECT_THAT(parent_surface()->blocking_surfaces_for_testing(), IsEmpty()); +} + +// parent_surface is blocked on |child_id1|, and child_surface2 is blocked on +// |child_id2| until the deadline hits. +TEST_F(CompositorFrameSinkSupportTest, DisplayCompositorLockingDeadlineHits) { + const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1); + const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1); + const SurfaceId child_id2 = MakeSurfaceId(kChildFrameSink2, 1); + + parent_support().SubmitCompositorFrame(parent_id.local_surface_id(), + MakeCompositorFrame({child_id1})); + + // parent_support is blocked on |child_id1|. + EXPECT_TRUE(dependency_tracker().has_deadline()); + EXPECT_FALSE(parent_surface()->HasActiveFrame()); + EXPECT_TRUE(parent_surface()->HasPendingFrame()); + EXPECT_THAT(parent_surface()->blocking_surfaces_for_testing(), + UnorderedElementsAre(child_id1)); + + child_support1().SubmitCompositorFrame(child_id1.local_surface_id(), + MakeCompositorFrame({child_id2})); + + // child_support1 should now be blocked on |child_id2|. + EXPECT_TRUE(dependency_tracker().has_deadline()); + EXPECT_FALSE(child_surface1()->HasActiveFrame()); + EXPECT_TRUE(child_surface1()->HasPendingFrame()); + EXPECT_THAT(child_surface1()->blocking_surfaces_for_testing(), + UnorderedElementsAre(child_id2)); + + // The parent should still be blocked on |child_id1| because it's pending. + EXPECT_THAT(parent_surface()->blocking_surfaces_for_testing(), + UnorderedElementsAre(child_id1)); + + BeginFrameArgs args = + CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 1); + + for (int i = 0; i < 3; ++i) { + begin_frame_source()->TestOnBeginFrame(args); + // There is still a looming deadline! Eeek! + EXPECT_TRUE(dependency_tracker().has_deadline()); + + // parent_support is still blocked on |child_id1|. + EXPECT_FALSE(parent_surface()->HasActiveFrame()); + EXPECT_TRUE(parent_surface()->HasPendingFrame()); + EXPECT_THAT(parent_surface()->blocking_surfaces_for_testing(), + UnorderedElementsAre(child_id1)); + + // child_support1 is still blocked on |child_id2|. + EXPECT_FALSE(child_surface1()->HasActiveFrame()); + EXPECT_TRUE(child_surface1()->HasPendingFrame()); + EXPECT_THAT(child_surface1()->blocking_surfaces_for_testing(), + UnorderedElementsAre(child_id2)); + } + + begin_frame_source()->TestOnBeginFrame(args); + + // The deadline has passed. + EXPECT_FALSE(dependency_tracker().has_deadline()); + + // parent_surface has been activated. + EXPECT_TRUE(parent_surface()->HasActiveFrame()); + EXPECT_FALSE(parent_surface()->HasPendingFrame()); + EXPECT_THAT(parent_surface()->blocking_surfaces_for_testing(), IsEmpty()); + + // child_surface1 has been activated. + EXPECT_TRUE(child_surface1()->HasActiveFrame()); + EXPECT_FALSE(child_surface1()->HasPendingFrame()); + EXPECT_THAT(child_surface1()->blocking_surfaces_for_testing(), IsEmpty()); +} + +// Verifies that the deadline does not reset if we submit CompositorFrames +// to new Surfaces with unresolved dependencies. +TEST_F(CompositorFrameSinkSupportTest, + DisplayCompositorLockingFramesSubmittedAfterDeadlineSet) { + const SurfaceId arbitrary_id = MakeSurfaceId(kArbitraryFrameSink, 1); + BeginFrameArgs args = + CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 1); + for (int i = 0; i < 3; ++i) { + LocalSurfaceId local_surface_id(1, base::UnguessableToken::Create()); + support(i).SubmitCompositorFrame(local_surface_id, + MakeCompositorFrame({arbitrary_id})); + // The deadline has been set. + EXPECT_TRUE(dependency_tracker().has_deadline()); + + // support(i) should be blocked on arbitrary_id. + EXPECT_FALSE(surface(i)->HasActiveFrame()); + EXPECT_TRUE(surface(i)->HasPendingFrame()); + EXPECT_THAT(surface(i)->blocking_surfaces_for_testing(), + UnorderedElementsAre(arbitrary_id)); + + // Issue a BeginFrame to get closer to the deadline. + begin_frame_source()->TestOnBeginFrame(args); + } + + // The deadline hits and all the Surfaces should activate. + begin_frame_source()->TestOnBeginFrame(args); + for (int i = 0; i < 3; ++i) { + EXPECT_TRUE(surface(i)->HasActiveFrame()); + EXPECT_FALSE(surface(i)->HasPendingFrame()); + EXPECT_THAT(surface(i)->blocking_surfaces_for_testing(), IsEmpty()); + } +} + +// This test verifies at the Surface activates once a CompositorFrame is +// submitted that has no unresolved dependencies. +TEST_F(CompositorFrameSinkSupportTest, + DisplayCompositorLockingNewFrameOverridesOldDependencies) { + const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1); + const SurfaceId arbitrary_id = MakeSurfaceId(kArbitraryFrameSink, 1); + + // Submit a CompositorFrame that depends on |arbitrary_id|. + parent_support().SubmitCompositorFrame(parent_id.local_surface_id(), + MakeCompositorFrame({arbitrary_id})); + + // Verify that the CompositorFrame is blocked on |arbitrary_id|. + EXPECT_FALSE(parent_surface()->HasActiveFrame()); + EXPECT_TRUE(parent_surface()->HasPendingFrame()); + EXPECT_THAT(parent_surface()->blocking_surfaces_for_testing(), + UnorderedElementsAre(arbitrary_id)); + + // Submit a CompositorFrame that has no dependencies. + parent_support().SubmitCompositorFrame( + parent_id.local_surface_id(), MakeCompositorFrame(empty_surface_ids())); + + // Verify that the CompositorFrame has been activated. + EXPECT_TRUE(parent_surface()->HasActiveFrame()); + EXPECT_FALSE(parent_surface()->HasPendingFrame()); + EXPECT_THAT(parent_surface()->blocking_surfaces_for_testing(), IsEmpty()); +} + +} // namespace test +} // namespace cc
diff --git a/cc/surfaces/surface.h b/cc/surfaces/surface.h index 0e74e16e..a427a822 100644 --- a/cc/surfaces/surface.h +++ b/cc/surfaces/surface.h
@@ -105,6 +105,10 @@ return referenced_surfaces_; } + const SurfaceDependencies& blocking_surfaces_for_testing() const { + return blocking_surfaces_; + } + bool HasActiveFrame() const { return active_frame_.has_value(); } bool HasPendingFrame() const { return pending_frame_.has_value(); } @@ -136,6 +140,7 @@ // on multiple Displays. std::set<BeginFrameSource*> begin_frame_sources_; + // The total set of CompositorFrames referenced by the active CompositorFrame. std::vector<SurfaceId> referenced_surfaces_; SurfaceDependencies blocking_surfaces_;
diff --git a/cc/surfaces/surface_factory_unittest.cc b/cc/surfaces/surface_factory_unittest.cc index 28c8042..99a890ef 100644 --- a/cc/surfaces/surface_factory_unittest.cc +++ b/cc/surfaces/surface_factory_unittest.cc
@@ -477,7 +477,8 @@ // Tests doing an EvictSurface before shutting down the factory. TEST_F(SurfaceFactoryTest, EvictSurface) { - LocalSurfaceId id(7, kArbitraryToken); + LocalSurfaceId local_surface_id(7, kArbitraryToken); + SurfaceId id(kArbitraryFrameSinkId, local_surface_id); TransferableResource resource; resource.id = 1; @@ -485,11 +486,14 @@ CompositorFrame frame; frame.resource_list.push_back(resource); uint32_t execute_count = 0; - factory_->SubmitCompositorFrame(id, std::move(frame), + factory_->SubmitCompositorFrame(local_surface_id, std::move(frame), base::Bind(&DrawCallback, &execute_count)); - EXPECT_EQ(last_created_surface_id().local_surface_id(), id); + EXPECT_EQ(last_created_surface_id().local_surface_id(), local_surface_id); local_surface_id_ = LocalSurfaceId(); + + EXPECT_TRUE(manager_.GetSurfaceForId(id)); factory_->EvictSurface(); + EXPECT_FALSE(manager_.GetSurfaceForId(id)); EXPECT_EQ(1u, execute_count); } @@ -535,7 +539,6 @@ SurfaceSequence(kArbitraryFrameSinkId, 4)); factory2->EvictSurface(); - CompositorFrame frame; DCHECK(manager_.GetSurfaceForId(id2)); manager_.SatisfySequence(SurfaceSequence(kArbitraryFrameSinkId, 4)); manager_.SatisfySequence(SurfaceSequence(kArbitraryFrameSinkId, 6));
diff --git a/cc/surfaces/surface_unittest.cc b/cc/surfaces/surface_unittest.cc index 46bf249e..c47e8a67 100644 --- a/cc/surfaces/surface_unittest.cc +++ b/cc/surfaces/surface_unittest.cc
@@ -20,14 +20,6 @@ static constexpr FrameSinkId kArbitraryFrameSinkId(1, 1); -CompositorFrame MakeCompositorFrame( - std::vector<SurfaceId> referenced_surfaces) { - CompositorFrame compositor_frame; - compositor_frame.metadata.referenced_surfaces = - std::move(referenced_surfaces); - return compositor_frame; -} - class FakeSurfaceFactoryClient : public SurfaceFactoryClient { public: FakeSurfaceFactoryClient() : begin_frame_source_(nullptr) {} @@ -44,398 +36,6 @@ BeginFrameSource* begin_frame_source_; }; -// Surface 1 is blocked on Surface 2 and Surface 3. -TEST(SurfaceTest, DisplayCompositorLockingBlockedOnTwo) { - SurfaceManager manager; - std::unique_ptr<FakeExternalBeginFrameSource> begin_frame_source( - new FakeExternalBeginFrameSource(0.f, false)); - - std::unique_ptr<SurfaceDependencyTracker> dependency_tracker( - new SurfaceDependencyTracker(&manager, begin_frame_source.get())); - manager.SetDependencyTracker(std::move(dependency_tracker)); - - LocalSurfaceId local_surface_id1(6, base::UnguessableToken::Create()); - SurfaceId surface_id1(FrameSinkId(1, 1), local_surface_id1); - - LocalSurfaceId local_surface_id2(7, base::UnguessableToken::Create()); - SurfaceId surface_id2(FrameSinkId(2, 2), local_surface_id2); - - LocalSurfaceId local_surface_id3(8, base::UnguessableToken::Create()); - SurfaceId surface_id3(FrameSinkId(3, 3), local_surface_id3); - - FakeSurfaceFactoryClient surface_factory_client1; - SurfaceFactory factory1(FrameSinkId(1, 1), &manager, - &surface_factory_client1); - factory1.SubmitCompositorFrame( - local_surface_id1, MakeCompositorFrame({surface_id2, surface_id3}), - SurfaceFactory::DrawCallback()); - EXPECT_TRUE(manager.dependency_tracker()->has_deadline()); - - // |factory1| is blocked on |surface_id2| and |surface_id3|. - EXPECT_FALSE(factory1.current_surface_for_testing()->HasActiveFrame()); - EXPECT_TRUE(factory1.current_surface_for_testing()->HasPendingFrame()); - - FakeSurfaceFactoryClient surface_factory_client2; - SurfaceFactory factory2(FrameSinkId(2, 2), &manager, - &surface_factory_client2); - factory2.SubmitCompositorFrame(local_surface_id2, - MakeCompositorFrame(std::vector<SurfaceId>()), - SurfaceFactory::DrawCallback()); - - EXPECT_TRUE(manager.dependency_tracker()->has_deadline()); - EXPECT_TRUE(factory2.current_surface_for_testing()->HasActiveFrame()); - EXPECT_FALSE(factory2.current_surface_for_testing()->HasPendingFrame()); - - // |factory1| is blocked on just |surface_id3|. - EXPECT_FALSE(factory1.current_surface_for_testing()->HasActiveFrame()); - EXPECT_TRUE(factory1.current_surface_for_testing()->HasPendingFrame()); - - FakeSurfaceFactoryClient surface_factory_client3; - SurfaceFactory factory3(FrameSinkId(3, 3), &manager, - &surface_factory_client3); - factory3.SubmitCompositorFrame(local_surface_id3, - MakeCompositorFrame(std::vector<SurfaceId>()), - SurfaceFactory::DrawCallback()); - EXPECT_FALSE(manager.dependency_tracker()->has_deadline()); - - // |factory1|'s Frame is now active. - EXPECT_TRUE(factory1.current_surface_for_testing()->HasActiveFrame()); - EXPECT_FALSE(factory1.current_surface_for_testing()->HasPendingFrame()); - - factory1.EvictSurface(); - factory2.EvictSurface(); - factory3.EvictSurface(); - - // Destroy the SurfaceDependencyTracker before we destroy the - // BeginFrameSource. - manager.SetDependencyTracker(nullptr); -} - -// Surface 1 is blocked on Surface 2 which is blocked on Surface 3. -TEST(SurfaceTest, DisplayCompositorLockingBlockedChain) { - SurfaceManager manager; - std::unique_ptr<FakeExternalBeginFrameSource> begin_frame_source( - new FakeExternalBeginFrameSource(0.f, false)); - - std::unique_ptr<SurfaceDependencyTracker> dependency_tracker( - new SurfaceDependencyTracker(&manager, begin_frame_source.get())); - manager.SetDependencyTracker(std::move(dependency_tracker)); - - LocalSurfaceId local_surface_id1(6, base::UnguessableToken::Create()); - SurfaceId surface_id1(FrameSinkId(1, 1), local_surface_id1); - - LocalSurfaceId local_surface_id2(7, base::UnguessableToken::Create()); - SurfaceId surface_id2(FrameSinkId(2, 2), local_surface_id2); - - LocalSurfaceId local_surface_id3(8, base::UnguessableToken::Create()); - SurfaceId surface_id3(FrameSinkId(3, 3), local_surface_id3); - - FakeSurfaceFactoryClient surface_factory_client1; - SurfaceFactory factory1(FrameSinkId(1, 1), &manager, - &surface_factory_client1); - factory1.SubmitCompositorFrame(local_surface_id1, - MakeCompositorFrame({surface_id2}), - SurfaceFactory::DrawCallback()); - - // |factory1| is blocked on |surface_id2|. - EXPECT_FALSE(factory1.current_surface_for_testing()->HasActiveFrame()); - EXPECT_TRUE(factory1.current_surface_for_testing()->HasPendingFrame()); - - FakeSurfaceFactoryClient surface_factory_client2; - SurfaceFactory factory2(FrameSinkId(2, 2), &manager, - &surface_factory_client2); - factory2.SubmitCompositorFrame(local_surface_id2, - MakeCompositorFrame({surface_id3}), - SurfaceFactory::DrawCallback()); - - // |factory2| is blocked on |surface_id3|. - EXPECT_FALSE(factory2.current_surface_for_testing()->HasActiveFrame()); - EXPECT_TRUE(factory2.current_surface_for_testing()->HasPendingFrame()); - - // |factory1| is still blocked on just |surface_id2|. - EXPECT_FALSE(factory1.current_surface_for_testing()->HasActiveFrame()); - EXPECT_TRUE(factory1.current_surface_for_testing()->HasPendingFrame()); - - FakeSurfaceFactoryClient surface_factory_client3; - SurfaceFactory factory3(FrameSinkId(3, 3), &manager, - &surface_factory_client3); - CompositorFrame frame3; - factory3.SubmitCompositorFrame(local_surface_id3, - MakeCompositorFrame(std::vector<SurfaceId>()), - SurfaceFactory::DrawCallback()); - - // |factory1|'s Frame is now active. - EXPECT_TRUE(factory1.current_surface_for_testing()->HasActiveFrame()); - EXPECT_FALSE(factory1.current_surface_for_testing()->HasPendingFrame()); - - // |factory2|'s Frame is now active. - EXPECT_TRUE(factory2.current_surface_for_testing()->HasActiveFrame()); - EXPECT_FALSE(factory2.current_surface_for_testing()->HasPendingFrame()); - - factory1.EvictSurface(); - factory2.EvictSurface(); - factory3.EvictSurface(); - - // Destroy the SurfaceDependencyTracker before we destroy the - // BeginFrameSource. - manager.SetDependencyTracker(nullptr); -} - -// Surface 1 and Surface 2 are blocked on Surface 3. -TEST(SurfaceTest, DisplayCompositorLockingTwoBlockedOnOne) { - SurfaceManager manager; - std::unique_ptr<FakeExternalBeginFrameSource> begin_frame_source( - new FakeExternalBeginFrameSource(0.f, false)); - - std::unique_ptr<SurfaceDependencyTracker> dependency_tracker( - new SurfaceDependencyTracker(&manager, begin_frame_source.get())); - manager.SetDependencyTracker(std::move(dependency_tracker)); - - LocalSurfaceId local_surface_id1(6, base::UnguessableToken::Create()); - SurfaceId surface_id1(FrameSinkId(1, 1), local_surface_id1); - - LocalSurfaceId local_surface_id2(7, base::UnguessableToken::Create()); - SurfaceId surface_id2(FrameSinkId(2, 2), local_surface_id2); - - LocalSurfaceId local_surface_id3(8, base::UnguessableToken::Create()); - SurfaceId surface_id3(FrameSinkId(3, 3), local_surface_id3); - - FakeSurfaceFactoryClient surface_factory_client1; - SurfaceFactory factory1(FrameSinkId(1, 1), &manager, - &surface_factory_client1); - factory1.SubmitCompositorFrame(local_surface_id1, - MakeCompositorFrame({surface_id3}), - SurfaceFactory::DrawCallback()); - - // |factory1| is blocked on |surface_id3|. - EXPECT_FALSE(factory1.current_surface_for_testing()->HasActiveFrame()); - EXPECT_TRUE(factory1.current_surface_for_testing()->HasPendingFrame()); - - FakeSurfaceFactoryClient surface_factory_client2; - SurfaceFactory factory2(FrameSinkId(2, 2), &manager, - &surface_factory_client2); - factory2.SubmitCompositorFrame(local_surface_id2, - MakeCompositorFrame({surface_id3}), - SurfaceFactory::DrawCallback()); - - // |factory2| is blocked on |surface_id3|. - EXPECT_FALSE(factory2.current_surface_for_testing()->HasActiveFrame()); - EXPECT_TRUE(factory2.current_surface_for_testing()->HasPendingFrame()); - - // |factory1| is still blocked on |surface_id3|. - EXPECT_FALSE(factory1.current_surface_for_testing()->HasActiveFrame()); - EXPECT_TRUE(factory1.current_surface_for_testing()->HasPendingFrame()); - - FakeSurfaceFactoryClient surface_factory_client3; - SurfaceFactory factory3(FrameSinkId(3, 3), &manager, - &surface_factory_client3); - factory3.SubmitCompositorFrame(local_surface_id3, - MakeCompositorFrame(std::vector<SurfaceId>()), - SurfaceFactory::DrawCallback()); - - // |factory1|'s Frame is now active. - EXPECT_TRUE(factory1.current_surface_for_testing()->HasActiveFrame()); - EXPECT_FALSE(factory1.current_surface_for_testing()->HasPendingFrame()); - - // |factory2|'s Frame is now active. - EXPECT_TRUE(factory2.current_surface_for_testing()->HasActiveFrame()); - EXPECT_FALSE(factory2.current_surface_for_testing()->HasPendingFrame()); - - factory1.EvictSurface(); - factory2.EvictSurface(); - factory3.EvictSurface(); - - // Destroy the SurfaceDependencyTracker before we destroy the - // BeginFrameSource. - manager.SetDependencyTracker(nullptr); -} - -// |factory1| is blocked on |surface_id2| but the deadline hits. -TEST(SurfaceTest, DisplayCompositorLockingDeadlineHits) { - SurfaceManager manager; - std::unique_ptr<FakeExternalBeginFrameSource> begin_frame_source( - new FakeExternalBeginFrameSource(0.f, false)); - - std::unique_ptr<SurfaceDependencyTracker> dependency_tracker( - new SurfaceDependencyTracker(&manager, begin_frame_source.get())); - manager.SetDependencyTracker(std::move(dependency_tracker)); - - LocalSurfaceId local_surface_id1(6, base::UnguessableToken::Create()); - SurfaceId surface_id1(FrameSinkId(1, 1), local_surface_id1); - - LocalSurfaceId local_surface_id2(7, base::UnguessableToken::Create()); - SurfaceId surface_id2(FrameSinkId(2, 2), local_surface_id2); - - LocalSurfaceId local_surface_id3(8, base::UnguessableToken::Create()); - SurfaceId surface_id3(FrameSinkId(3, 3), local_surface_id3); - - FakeSurfaceFactoryClient surface_factory_client1; - SurfaceFactory factory1(FrameSinkId(1, 1), &manager, - &surface_factory_client1); - CompositorFrame frame; - factory1.SubmitCompositorFrame(local_surface_id1, - MakeCompositorFrame({surface_id2}), - SurfaceFactory::DrawCallback()); - EXPECT_TRUE(manager.dependency_tracker()->has_deadline()); - - // |factory1| is blocked on |surface_id2|. - EXPECT_FALSE(factory1.current_surface_for_testing()->HasActiveFrame()); - EXPECT_TRUE(factory1.current_surface_for_testing()->HasPendingFrame()); - - FakeSurfaceFactoryClient surface_factory_client2; - SurfaceFactory factory2(FrameSinkId(2, 2), &manager, - &surface_factory_client2); - factory2.SubmitCompositorFrame(local_surface_id2, - MakeCompositorFrame({surface_id3}), - SurfaceFactory::DrawCallback()); - EXPECT_TRUE(manager.dependency_tracker()->has_deadline()); - - // |factory2| is blocked on |surface_id3|. - EXPECT_FALSE(factory2.current_surface_for_testing()->HasActiveFrame()); - EXPECT_TRUE(factory2.current_surface_for_testing()->HasPendingFrame()); - - BeginFrameArgs args = - CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 1); - - for (int i = 0; i < 3; ++i) { - begin_frame_source->TestOnBeginFrame(args); - // |factory1| is still blocked on |surface_id2|. - EXPECT_FALSE(factory1.current_surface_for_testing()->HasActiveFrame()); - EXPECT_TRUE(factory1.current_surface_for_testing()->HasPendingFrame()); - - // |factory2| is still blcoked on |surface_id3|. - EXPECT_FALSE(factory2.current_surface_for_testing()->HasActiveFrame()); - EXPECT_TRUE(factory2.current_surface_for_testing()->HasPendingFrame()); - } - - begin_frame_source->TestOnBeginFrame(args); - - // |factory1| and |factory2| are no longer blocked. - EXPECT_TRUE(factory1.current_surface_for_testing()->HasActiveFrame()); - EXPECT_FALSE(factory1.current_surface_for_testing()->HasPendingFrame()); - EXPECT_TRUE(factory2.current_surface_for_testing()->HasActiveFrame()); - EXPECT_FALSE(factory2.current_surface_for_testing()->HasPendingFrame()); - EXPECT_FALSE(manager.dependency_tracker()->has_deadline()); - - factory1.EvictSurface(); - factory2.EvictSurface(); - - // Destroy the SurfaceDependencyTracker before we destroy the - // BeginFrameSource. - manager.SetDependencyTracker(nullptr); -} - -// Verifies that the deadline does not reset if we submit CompositorFrames -// to new Surfaces with unresolved dependencies. -TEST(SurfaceTest, DisplayCompositorLockingFramesSubmittedAfterDeadlineSet) { - SurfaceManager manager; - std::unique_ptr<FakeExternalBeginFrameSource> begin_frame_source( - new FakeExternalBeginFrameSource(0.f, false)); - - std::unique_ptr<SurfaceDependencyTracker> dependency_tracker( - new SurfaceDependencyTracker(&manager, begin_frame_source.get())); - manager.SetDependencyTracker(std::move(dependency_tracker)); - - LocalSurfaceId local_surface_id(1, base::UnguessableToken::Create()); - SurfaceId surface_id(FrameSinkId(1, 1), local_surface_id); - - std::vector<std::unique_ptr<SurfaceFactoryClient>> surface_factory_clients; - std::vector<std::unique_ptr<SurfaceFactory>> surface_factories; - - BeginFrameArgs args = - CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 1); - - // Issue BeginFrames and create new surfaces with dependencies. - for (int i = 0; i < 3; ++i) { - LocalSurfaceId local_surface_id(1, base::UnguessableToken::Create()); - std::unique_ptr<SurfaceFactoryClient> surface_factory_client( - base::MakeUnique<FakeSurfaceFactoryClient>()); - std::unique_ptr<SurfaceFactory> surface_factory( - base::MakeUnique<SurfaceFactory>(FrameSinkId(2 + i, 2 + i), &manager, - surface_factory_client.get())); - surface_factory->SubmitCompositorFrame(local_surface_id, - MakeCompositorFrame({surface_id}), - SurfaceFactory::DrawCallback()); - // The deadline has been set. - EXPECT_TRUE(manager.dependency_tracker()->has_deadline()); - - // |surface_factory| is blocked on |surface_id2|. - EXPECT_FALSE( - surface_factory->current_surface_for_testing()->HasActiveFrame()); - EXPECT_TRUE( - surface_factory->current_surface_for_testing()->HasPendingFrame()); - - // Issue a BeginFrame. - begin_frame_source->TestOnBeginFrame(args); - - surface_factory_clients.push_back(std::move(surface_factory_client)); - surface_factories.push_back(std::move(surface_factory)); - } - - // This BeginFrame should cause all the Surfaces to activate. - begin_frame_source->TestOnBeginFrame(args); - - // Verify that all the Surfaces have activated. - for (int i = 0; i < 3; ++i) { - EXPECT_TRUE( - surface_factories[i]->current_surface_for_testing()->HasActiveFrame()); - EXPECT_FALSE( - surface_factories[i]->current_surface_for_testing()->HasPendingFrame()); - // We must evict the surface before we destroy the factories. - surface_factories[i]->EvictSurface(); - } - - // Destroy all the SurfaceFactories and their clients. - surface_factories.clear(); - surface_factory_clients.clear(); - - // Destroy the SurfaceDependencyTracker before we destroy the - // BeginFrameSource. - manager.SetDependencyTracker(nullptr); -} - -// Frame activates once a new frame is submitted. -TEST(SurfaceTest, DisplayCompositorLockingNewFrameOverridesOldDependencies) { - SurfaceManager manager; - std::unique_ptr<FakeExternalBeginFrameSource> begin_frame_source( - new FakeExternalBeginFrameSource(0.f, false)); - - manager.SetDependencyTracker(base::MakeUnique<SurfaceDependencyTracker>( - &manager, begin_frame_source.get())); - - LocalSurfaceId local_surface_id1(6, base::UnguessableToken::Create()); - SurfaceId surface_id1(FrameSinkId(1, 1), local_surface_id1); - - LocalSurfaceId local_surface_id2(7, base::UnguessableToken::Create()); - SurfaceId surface_id2(FrameSinkId(2, 2), local_surface_id2); - - FakeSurfaceFactoryClient surface_factory_client1; - SurfaceFactory factory1(FrameSinkId(1, 1), &manager, - &surface_factory_client1); - factory1.SubmitCompositorFrame(local_surface_id1, - MakeCompositorFrame({surface_id2}), - SurfaceFactory::DrawCallback()); - - // |factory1|'s Frame is blocked on |surface_id2|. - EXPECT_FALSE(factory1.current_surface_for_testing()->HasActiveFrame()); - EXPECT_TRUE(factory1.current_surface_for_testing()->HasPendingFrame()); - EXPECT_TRUE(manager.dependency_tracker()->has_deadline()); - - // Another frame is submitted to |factory1| that has no dependencies. - factory1.SubmitCompositorFrame(local_surface_id1, - MakeCompositorFrame(std::vector<SurfaceId>()), - SurfaceFactory::DrawCallback()); - EXPECT_TRUE(factory1.current_surface_for_testing()->HasActiveFrame()); - EXPECT_FALSE(factory1.current_surface_for_testing()->HasPendingFrame()); - EXPECT_FALSE(manager.dependency_tracker()->has_deadline()); - - factory1.EvictSurface(); - - // Destroy the SurfaceDependencyTracker before we destroy the - // BeginFrameSource. - manager.SetDependencyTracker(nullptr); -} - TEST(SurfaceTest, SurfaceLifetime) { SurfaceManager manager; FakeSurfaceFactoryClient surface_factory_client;
diff --git a/cc/tiles/gpu_image_decode_cache.cc b/cc/tiles/gpu_image_decode_cache.cc index 93cdd29..1dcc40c 100644 --- a/cc/tiles/gpu_image_decode_cache.cc +++ b/cc/tiles/gpu_image_decode_cache.cc
@@ -6,6 +6,7 @@ #include <inttypes.h> +#include "base/auto_reset.h" #include "base/debug/alias.h" #include "base/memory/discardable_memory_allocator.h" #include "base/memory/memory_coordinator_client_registry.h" @@ -1268,24 +1269,15 @@ } void GpuImageDecodeCache::OnMemoryStateChange(base::MemoryState state) { - switch (state) { - case base::MemoryState::NORMAL: - memory_state_ = state; - break; - case base::MemoryState::THROTTLED: - case base::MemoryState::SUSPENDED: { - memory_state_ = state; + memory_state_ = state; +} - // We've just changed our memory state to a (potentially) more - // restrictive one. Re-enforce cache limits. - base::AutoLock lock(lock_); - EnsureCapacity(0); - break; - } - case base::MemoryState::UNKNOWN: - // NOT_REACHED. - break; - } +void GpuImageDecodeCache::OnPurgeMemory() { + base::AutoLock lock(lock_); + // Temporary changes |memory_state_| to free up cache as much as possible. + base::AutoReset<base::MemoryState> reset(&memory_state_, + base::MemoryState::SUSPENDED); + EnsureCapacity(0); } } // namespace cc
diff --git a/cc/tiles/gpu_image_decode_cache.h b/cc/tiles/gpu_image_decode_cache.h index f2b21f1..14e4996 100644 --- a/cc/tiles/gpu_image_decode_cache.h +++ b/cc/tiles/gpu_image_decode_cache.h
@@ -130,6 +130,7 @@ // base::MemoryCoordinatorClient overrides. void OnMemoryStateChange(base::MemoryState state) override; + void OnPurgeMemory() override; // Called by Decode / Upload tasks. void DecodeImage(const DrawImage& image);
diff --git a/cc/tiles/gpu_image_decode_cache_unittest.cc b/cc/tiles/gpu_image_decode_cache_unittest.cc index aeeb6880..901c7f8 100644 --- a/cc/tiles/gpu_image_decode_cache_unittest.cc +++ b/cc/tiles/gpu_image_decode_cache_unittest.cc
@@ -1336,7 +1336,8 @@ DCHECK_EQ(cache.GetBytesUsedForTesting(), 0u); DCHECK_EQ(cache.GetNumCacheEntriesForTesting(), 1u); - // Set us to the SUSPENDED state. + // Set us to the SUSPENDED state with purging. + cache.OnPurgeMemory(); cache.OnMemoryStateChange(base::MemoryState::SUSPENDED); // Nothing should be cached.
diff --git a/cc/tiles/software_image_decode_cache.cc b/cc/tiles/software_image_decode_cache.cc index 53758c02..13ed0512 100644 --- a/cc/tiles/software_image_decode_cache.cc +++ b/cc/tiles/software_image_decode_cache.cc
@@ -797,12 +797,10 @@ } } -void SoftwareImageDecodeCache::ReduceCacheUsage() { +void SoftwareImageDecodeCache::ReduceCacheUsageUntilWithinLimit(size_t limit) { TRACE_EVENT0("cc", "SoftwareImageDecodeCache::ReduceCacheUsage"); - base::AutoLock lock(lock_); - size_t num_to_remove = (decoded_images_.size() > max_items_in_cache_) - ? (decoded_images_.size() - max_items_in_cache_) - : 0; + size_t num_to_remove = + (decoded_images_.size() > limit) ? (decoded_images_.size() - limit) : 0; for (auto it = decoded_images_.rbegin(); num_to_remove != 0 && it != decoded_images_.rend();) { if (it->second->is_locked()) { @@ -815,6 +813,11 @@ } } +void SoftwareImageDecodeCache::ReduceCacheUsage() { + base::AutoLock lock(lock_); + ReduceCacheUsageUntilWithinLimit(max_items_in_cache_); +} + void SoftwareImageDecodeCache::RemovePendingTask(const ImageKey& key, DecodeTaskType task_type) { base::AutoLock lock(lock_); @@ -1173,7 +1176,11 @@ return; } } - ReduceCacheUsage(); +} + +void SoftwareImageDecodeCache::OnPurgeMemory() { + base::AutoLock lock(lock_); + ReduceCacheUsageUntilWithinLimit(0); } } // namespace cc
diff --git a/cc/tiles/software_image_decode_cache.h b/cc/tiles/software_image_decode_cache.h index 1f3d72f..277d4e7 100644 --- a/cc/tiles/software_image_decode_cache.h +++ b/cc/tiles/software_image_decode_cache.h
@@ -271,8 +271,13 @@ const char* cache_name, base::trace_event::ProcessMemoryDump* pmd) const; + // Removes unlocked decoded images until the number of decoded images is + // reduced within the given limit. + void ReduceCacheUsageUntilWithinLimit(size_t limit); + // Overriden from base::MemoryCoordinatorClient. void OnMemoryStateChange(base::MemoryState state) override; + void OnPurgeMemory() override; // Helper method to get the different tasks. Note that this should be used as // if it was public (ie, all of the locks need to be properly acquired).
diff --git a/cc/tiles/tile_draw_info.cc b/cc/tiles/tile_draw_info.cc index 560345ad..2e4eebb7 100644 --- a/cc/tiles/tile_draw_info.cc +++ b/cc/tiles/tile_draw_info.cc
@@ -9,17 +9,9 @@ namespace cc { -TileDrawInfo::TileDrawInfo() - : was_ever_ready_to_draw_(false), - was_ever_used_to_draw_(false), - was_a_prepaint_tile_(false) {} - +TileDrawInfo::TileDrawInfo() = default; TileDrawInfo::~TileDrawInfo() { DCHECK(!resource_); - if (was_ever_ready_to_draw_ && was_a_prepaint_tile_) { - UMA_HISTOGRAM_BOOLEAN("Renderer4.ReadyToDrawTileDrawStatus", - was_ever_used_to_draw_); - } } void TileDrawInfo::AsValueInto(base::trace_event::TracedValue* state) const {
diff --git a/cc/tiles/tile_draw_info.h b/cc/tiles/tile_draw_info.h index 0a4db758..8ba0885 100644 --- a/cc/tiles/tile_draw_info.h +++ b/cc/tiles/tile_draw_info.h
@@ -81,9 +81,6 @@ void AsValueInto(base::trace_event::TracedValue* state) const; - void set_was_ever_used_to_draw() { was_ever_used_to_draw_ = true; } - void set_was_a_prepaint_tile() { was_a_prepaint_tile_ = true; } - private: friend class Tile; friend class TileManager; @@ -98,7 +95,6 @@ void set_resource_ready_for_draw() { is_resource_ready_to_draw_ = true; - was_ever_ready_to_draw_ = true; } Resource* TakeResource(); @@ -106,7 +102,6 @@ void set_solid_color(const SkColor& color) { mode_ = SOLID_COLOR_MODE; solid_color_ = color; - was_ever_ready_to_draw_ = true; } void set_oom() { mode_ = OOM_MODE; } @@ -116,11 +111,6 @@ Resource* resource_ = nullptr; bool contents_swizzled_ = false; bool is_resource_ready_to_draw_ = false; - - // Used for gathering UMA stats. - bool was_ever_ready_to_draw_ : 1; - bool was_ever_used_to_draw_ : 1; - bool was_a_prepaint_tile_ : 1; }; } // namespace cc
diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc index 12f3dfd..c7c9ad91 100644 --- a/cc/tiles/tile_manager.cc +++ b/cc/tiles/tile_manager.cc
@@ -669,8 +669,6 @@ tile->content_rect(), tile->contents_scale(), &color); if (is_solid_color) { tile->draw_info().set_solid_color(color); - if (!tile_is_needed_now) - tile->draw_info().set_was_a_prepaint_tile(); client_->NotifyTileStateChanged(tile); continue; } @@ -730,13 +728,6 @@ memory_usage += memory_required_by_tile_to_be_scheduled; work_to_schedule.tiles_to_raster.push_back(prioritized_tile); - - // Since we scheduled the tile, set whether it was a prepaint or not - // assuming that the tile will successfully finish running. We don't have - // priority information at the time the tile completes, so it should be done - // here. - if (!tile_is_needed_now) - tile->draw_info().set_was_a_prepaint_tile(); } // Debugging to check that remaining tiles in the priority queue are not in
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java index 6db719eae2..faf8149 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java
@@ -88,9 +88,9 @@ private static final int FRE_PROGRESS_COMPLETED_NOT_SIGNED_IN = 5; private static final int FRE_PROGRESS_MAX = 6; private static final EnumeratedHistogramSample sMobileFreProgressMainIntentHistogram = - new EnumeratedHistogramSample("MobileFre.SignInChoice.MainIntent", FRE_PROGRESS_MAX); + new EnumeratedHistogramSample("MobileFre.Progress.MainIntent", FRE_PROGRESS_MAX); private static final EnumeratedHistogramSample sMobileFreProgressViewIntentHistogram = - new EnumeratedHistogramSample("MobileFre.SignInChoice.ViewIntent", FRE_PROGRESS_MAX); + new EnumeratedHistogramSample("MobileFre.Progress.ViewIntent", FRE_PROGRESS_MAX); @VisibleForTesting static FirstRunGlue sGlue = new FirstRunGlueImpl();
diff --git a/chrome/app/chrome_main.cc b/chrome/app/chrome_main.cc index c35dd61d..2210192 100644 --- a/chrome/app/chrome_main.cc +++ b/chrome/app/chrome_main.cc
@@ -4,10 +4,11 @@ #include <stdint.h> -#include "build/build_config.h" #include "base/command_line.h" #include "base/time/time.h" +#include "build/build_config.h" #include "chrome/app/chrome_main_delegate.h" +#include "chrome/common/chrome_switches.h" #include "chrome/common/features.h" #include "content/public/app/content_main.h" #include "content/public/common/content_switches.h" @@ -101,7 +102,7 @@ version_info::Channel channel = chrome::GetChannel(); if (channel == version_info::Channel::CANARY || channel == version_info::Channel::UNKNOWN) { - if (command_line->HasSwitch("mash")) + if (command_line->HasSwitch(switches::kMash)) return MashMain(); WaitForMashDebuggerIfNecessary(); if (service_manager::ServiceManagerIsRemote())
diff --git a/chrome/app/mash/BUILD.gn b/chrome/app/mash/BUILD.gn index 292a1919..a45a8223 100644 --- a/chrome/app/mash/BUILD.gn +++ b/chrome/app/mash/BUILD.gn
@@ -14,6 +14,7 @@ deps = [ ":chrome_mash_catalog", "//base:i18n", + "//chrome/common:constants", "//components/tracing:startup_tracing", "//content/public/common", "//mash/common",
diff --git a/chrome/app/mash/DEPS b/chrome/app/mash/DEPS index 8fdd8af..7d04821 100644 --- a/chrome/app/mash/DEPS +++ b/chrome/app/mash/DEPS
@@ -5,6 +5,7 @@ # depend upon chrome code in any way. "-chrome", "+chrome/app/mash", + "+chrome/common/chrome_switches.h", "+components/font_service", "+components/tracing", "+services/ui",
diff --git a/chrome/app/mash/mash_runner.cc b/chrome/app/mash/mash_runner.cc index e436fbd..fc63098 100644 --- a/chrome/app/mash/mash_runner.cc +++ b/chrome/app/mash/mash_runner.cc
@@ -28,6 +28,7 @@ #include "base/threading/thread.h" #include "base/trace_event/trace_event.h" #include "chrome/app/mash/chrome_mash_catalog.h" +#include "chrome/common/chrome_switches.h" #include "components/tracing/common/trace_to_console.h" #include "components/tracing/common/tracing_switches.h" #include "content/public/common/content_switches.h" @@ -110,13 +111,13 @@ // When launching the browser process, ensure that we don't inherit the // --mash flag so it proceeds with the normal content/browser startup path. - // Eliminate all copies in case the developer passed more than one. - base::CommandLine::StringVector new_argv; - for (const base::CommandLine::StringType& arg : command_line->argv()) { - if (arg != FILE_PATH_LITERAL("--mash")) - new_argv.push_back(arg); + base::CommandLine::SwitchMap new_switches = command_line->GetSwitches(); + new_switches.erase(switches::kMash); + *command_line = base::CommandLine(command_line->GetProgram()); + for (const std::pair<std::string, base::CommandLine::StringType>& sw : + new_switches) { + command_line->AppendSwitchNative(sw.first, sw.second); } - *command_line = base::CommandLine(new_argv); } DISALLOW_COPY_AND_ASSIGN(ServiceProcessLauncherDelegateImpl);
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index fb8fbf2..63fac04 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -926,9 +926,11 @@ IDS_FLAGS_RUN_ALL_FLASH_IN_ALLOW_MODE_DESCRIPTION, kOsDesktop, FEATURE_VALUE_TYPE(features::kRunAllFlashInAllowMode)}, #endif // ENABLE_PLUGINS -#if defined(OS_CHROMEOS) +#if BUILDFLAG(ENABLE_PACKAGE_MASH_SERVICES) {"mash", IDS_FLAGS_USE_MASH_NAME, IDS_FLAGS_USE_MASH_DESCRIPTION, kOsCrOS, - SINGLE_VALUE_TYPE("mash")}, + SINGLE_VALUE_TYPE(switches::kMash)}, +#endif // BUILDFLAG(ENABLE_PACKAGE_MASH_SERVICES) +#if defined(OS_CHROMEOS) {"allow-touchpad-three-finger-click", IDS_FLAGS_ALLOW_TOUCHPAD_THREE_FINGER_CLICK_NAME, IDS_FLAGS_ALLOW_TOUCHPAD_THREE_FINGER_CLICK_DESCRIPTION, kOsCrOS,
diff --git a/chrome/browser/apps/app_browsertest.cc b/chrome/browser/apps/app_browsertest.cc index 823407a..36b4e308 100644 --- a/chrome/browser/apps/app_browsertest.cc +++ b/chrome/browser/apps/app_browsertest.cc
@@ -7,6 +7,7 @@ #include <memory> #include "apps/launcher.h" +#include "base/auto_reset.h" #include "base/bind.h" #include "base/command_line.h" #include "base/files/file_util.h" @@ -42,7 +43,6 @@ #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_widget_host_view.h" #include "content/public/test/browser_test_utils.h" -#include "content/public/test/test_utils.h" #include "extensions/browser/app_window/app_window.h" #include "extensions/browser/app_window/app_window_registry.h" #include "extensions/browser/app_window/native_app_window.h" @@ -123,10 +123,7 @@ #if BUILDFLAG(ENABLE_PRINT_PREVIEW) class ScopedPreviewTestingDelegate : PrintPreviewUI::TestingDelegate { public: - explicit ScopedPreviewTestingDelegate(bool auto_cancel) - : auto_cancel_(auto_cancel), - total_page_count_(1), - rendered_page_count_(0) { + ScopedPreviewTestingDelegate() { PrintPreviewUI::SetDelegateForTesting(this); } @@ -135,9 +132,6 @@ } // PrintPreviewUI::TestingDelegate implementation. - bool IsAutoCancelEnabled() override { return auto_cancel_; } - - // PrintPreviewUI::TestingDelegate implementation. void DidGetPreviewPageCount(int page_count) override { total_page_count_ = page_count; } @@ -147,18 +141,18 @@ dialog_size_ = preview_dialog->GetContainerBounds().size(); ++rendered_page_count_; CHECK(rendered_page_count_ <= total_page_count_); - if (waiting_runner_.get() && rendered_page_count_ == total_page_count_) { - waiting_runner_->Quit(); + if (rendered_page_count_ == total_page_count_ && run_loop_) { + run_loop_->Quit(); } } void WaitUntilPreviewIsReady() { - CHECK(!waiting_runner_.get()); - if (rendered_page_count_ < total_page_count_) { - waiting_runner_ = new content::MessageLoopRunner; - waiting_runner_->Run(); - waiting_runner_ = NULL; - } + if (rendered_page_count_ >= total_page_count_) + return; + + base::RunLoop run_loop; + base::AutoReset<base::RunLoop*> auto_reset(&run_loop_, &run_loop); + run_loop.Run(); } gfx::Size dialog_size() { @@ -166,10 +160,9 @@ } private: - bool auto_cancel_; - int total_page_count_; - int rendered_page_count_; - scoped_refptr<content::MessageLoopRunner> waiting_runner_; + int total_page_count_ = 1; + int rendered_page_count_ = 0; + base::RunLoop* run_loop_ = nullptr; gfx::Size dialog_size_; }; @@ -1138,17 +1131,9 @@ #if BUILDFLAG(ENABLE_PRINT_PREVIEW) -#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) -#define MAYBE_WindowDotPrintShouldBringUpPrintPreview \ - DISABLED_WindowDotPrintShouldBringUpPrintPreview -#else -#define MAYBE_WindowDotPrintShouldBringUpPrintPreview \ - WindowDotPrintShouldBringUpPrintPreview -#endif - IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, - MAYBE_WindowDotPrintShouldBringUpPrintPreview) { - ScopedPreviewTestingDelegate preview_delegate(true); + WindowDotPrintShouldBringUpPrintPreview) { + ScopedPreviewTestingDelegate preview_delegate; ASSERT_TRUE(RunPlatformAppTest("platform_apps/print_api")) << message_; preview_delegate.WaitUntilPreviewIsReady(); } @@ -1156,7 +1141,7 @@ // This test verifies that http://crbug.com/297179 is fixed. IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, DISABLED_ClosingWindowWhilePrintingShouldNotCrash) { - ScopedPreviewTestingDelegate preview_delegate(false); + ScopedPreviewTestingDelegate preview_delegate; ASSERT_TRUE(RunPlatformAppTest("platform_apps/print_api")) << message_; preview_delegate.WaitUntilPreviewIsReady(); GetFirstAppWindow()->GetBaseWindow()->Close(); @@ -1178,7 +1163,7 @@ // areas that are too small, and ones with heights less than 191 pixels will // have vertical scrollers for their controls that are too small. gfx::Size minimum_dialog_size(410, 191); - ScopedPreviewTestingDelegate preview_delegate(false); + ScopedPreviewTestingDelegate preview_delegate; ASSERT_TRUE(RunPlatformAppTest("platform_apps/print_api")) << message_; preview_delegate.WaitUntilPreviewIsReady(); EXPECT_GE(preview_delegate.dialog_size().width(),
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc index 0a1c5f7a..98690ba 100644 --- a/chrome/browser/chrome_browser_main.cc +++ b/chrome/browser/chrome_browser_main.cc
@@ -468,19 +468,14 @@ #endif // defined(OS_MACOSX) void RegisterComponentsForUpdate() { - component_updater::ComponentUpdateService* cus = - g_browser_process->component_updater(); + const auto cus = g_browser_process->component_updater(); - // Registration can be before or after cus->Start() so it is ok to post - // a task to the UI thread to do registration once you done the necessary - // file IO to know you existing component version. -#if !defined(OS_ANDROID) -#if !defined(OS_CHROMEOS) if (base::FeatureList::IsEnabled(features::kImprovedRecoveryComponent)) RegisterRecoveryImprovedComponent(cus, g_browser_process->local_state()); else RegisterRecoveryComponent(cus, g_browser_process->local_state()); -#endif // !defined(OS_CHROMEOS) + +#if !defined(OS_ANDROID) RegisterPepperFlashComponent(cus); #if !defined(OS_CHROMEOS) RegisterSwiftShaderComponent(cus);
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index 6d382dd..c9242bc1 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -1190,8 +1190,11 @@ "printing/cups_print_job_notification.h", "printing/cups_print_job_notification_manager.cc", "printing/cups_print_job_notification_manager.h", + "printing/fake_printer_discoverer.cc", + "printing/fake_printer_discoverer.h", "printing/ppd_provider_factory.cc", "printing/ppd_provider_factory.h", + "printing/printer_discoverer.h", "printing/printer_pref_manager.cc", "printing/printer_pref_manager.h", "printing/printer_pref_manager_factory.cc",
diff --git a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc index fb835af..8cc8410c 100644 --- a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc +++ b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc
@@ -7,7 +7,6 @@ #include "ash/common/accelerators/accelerator_controller.h" #include "ash/common/accelerators/accelerator_table.h" #include "ash/common/accessibility_types.h" -#include "ash/common/material_design/material_design_controller.h" #include "ash/common/system/tray/system_tray.h" #include "ash/common/wm_shell.h" #include "ash/shell.h" @@ -438,13 +437,6 @@ } SendKeyPress(ui::VKEY_RETURN); - if (!ash::MaterialDesignController::IsSystemTrayMenuMaterial()) { - while (true) { - if (base::MatchPattern(speech_monitor_.GetNextUtterance(), "*Bluetooth")) - break; - } - } - // Navigate to return to previous menu button and press it. while (true) { std::string utterance = speech_monitor_.GetNextUtterance(); @@ -456,13 +448,8 @@ while (true) { std::string utterance = speech_monitor_.GetNextUtterance(); - if (ash::MaterialDesignController::IsSystemTrayMenuMaterial()) { - if (base::MatchPattern(utterance, "Bluetooth*")) - break; - } else { - if (base::MatchPattern(utterance, "*Bluetooth")) - break; - } + if (base::MatchPattern(utterance, "Bluetooth*")) + break; } }
diff --git a/chrome/browser/chromeos/arc/video/gpu_arc_video_service_host.cc b/chrome/browser/chromeos/arc/video/gpu_arc_video_service_host.cc index b6799d49..203765d 100644 --- a/chrome/browser/chromeos/arc/video/gpu_arc_video_service_host.cc +++ b/chrome/browser/chromeos/arc/video/gpu_arc_video_service_host.cc
@@ -17,6 +17,7 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/gpu_service_registry.h" #include "mojo/edk/embedder/embedder.h" +#include "mojo/edk/embedder/pending_process_connection.h" #include "mojo/edk/embedder/platform_channel_pair.h" #include "mojo/public/cpp/bindings/strong_binding.h" #include "services/service_manager/public/cpp/interface_provider.h" @@ -73,10 +74,9 @@ // Hardcode pid 0 since it is unused in mojo. const base::ProcessHandle kUnusedChildProcessHandle = base::kNullProcessHandle; + mojo::edk::PendingProcessConnection process; mojo::edk::PlatformChannelPair channel_pair; - std::string child_token = mojo::edk::GenerateRandomToken(); - mojo::edk::ChildProcessLaunched(kUnusedChildProcessHandle, - channel_pair.PassServerHandle(), child_token); + process.Connect(kUnusedChildProcessHandle, channel_pair.PassServerHandle()); MojoHandle wrapped_handle; MojoResult wrap_result = mojo::edk::CreatePlatformHandleWrapper( @@ -88,14 +88,8 @@ } mojo::ScopedHandle child_handle{mojo::Handle(wrapped_handle)}; - std::string token = mojo::edk::GenerateRandomToken(); - mojo::ScopedMessagePipeHandle server_pipe = - mojo::edk::CreateParentMessagePipe(token, child_token); - if (!server_pipe.is_valid()) { - LOG(ERROR) << "Invalid pipe"; - callback.Run(mojo::ScopedHandle(), std::string()); - return; - } + std::string token; + mojo::ScopedMessagePipeHandle server_pipe = process.CreateMessagePipe(&token); callback.Run(std::move(child_handle), token); mojo::MakeStrongBinding(base::MakeUnique<VideoAcceleratorFactoryService>(),
diff --git a/chrome/browser/chromeos/login/enterprise_enrollment_browsertest.cc b/chrome/browser/chromeos/login/enterprise_enrollment_browsertest.cc index 766d34c4..2a75d861 100644 --- a/chrome/browser/chromeos/login/enterprise_enrollment_browsertest.cc +++ b/chrome/browser/chromeos/login/enterprise_enrollment_browsertest.cc
@@ -176,8 +176,9 @@ // Shows the enrollment screen and simulates an enrollment failure. Verifies // that the error screen is displayed. +// TODO(crbug.com/690634): Disabled due to timeout flakiness. IN_PROC_BROWSER_TEST_F(EnterpriseEnrollmentTest, - TestProperPageGetsLoadedOnEnrollmentFailure) { + DISABLED_TestProperPageGetsLoadedOnEnrollmentFailure) { ShowEnrollmentScreen(); enrollment_screen()->OnEnrollmentError(policy::EnrollmentStatus::ForStatus(
diff --git a/chrome/browser/chromeos/login/session/user_session_manager.cc b/chrome/browser/chromeos/login/session/user_session_manager.cc index b065b22..6c6b6c4 100644 --- a/chrome/browser/chromeos/login/session/user_session_manager.cc +++ b/chrome/browser/chromeos/login/session/user_session_manager.cc
@@ -77,6 +77,7 @@ #include "chrome/browser/ui/app_list/app_list_service.h" #include "chrome/browser/ui/ash/ash_util.h" #include "chrome/browser/ui/startup/startup_browser_creator.h" +#include "chrome/common/channel_info.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/logging_chrome.h" #include "chrome/common/pref_names.h" @@ -107,6 +108,7 @@ #include "components/user_manager/user_manager.h" #include "components/user_manager/user_names.h" #include "components/user_manager/user_type.h" +#include "components/version_info/version_info.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/notification_service.h" #include "content/public/browser/storage_partition.h" @@ -284,12 +286,37 @@ if (user_manager::UserManager::Get()->IsLoggedInAsSupervisedUser()) return false; + // When running Mus+ash, the flags stored in Profile Prefs will contain + // --mash, while the browser command line will not (and should not) have + // it, so ignore it for the purpose of comparison. + // TODO(mfomitchev): Find a better way. crbug.com/690083 + bool in_mash = false; + base::CommandLine user_flags_no_mash = user_flags; + +#if BUILDFLAG(ENABLE_PACKAGE_MASH_SERVICES) + in_mash = user_flags.HasSwitch(::switches::kMash); + if (in_mash) { + base::CommandLine::SwitchMap switches = user_flags.GetSwitches(); + switches.erase(::switches::kMash); + user_flags_no_mash = base::CommandLine(user_flags.GetProgram()); + for (const std::pair<std::string, base::CommandLine::StringType>& sw : + switches) { + user_flags_no_mash.AppendSwitchNative(sw.first, sw.second); + } + } +#endif // BUILDFLAG(ENABLE_PACKAGE_MASH_SERVICES) + if (about_flags::AreSwitchesIdenticalToCurrentCommandLine( - user_flags, *base::CommandLine::ForCurrentProcess(), + user_flags_no_mash, *base::CommandLine::ForCurrentProcess(), out_command_line_difference)) { return false; } + // TODO(mfomitchev): Browser restart doesn't currently work in Mus+ash. + // So if we are running Mustash and we need to restart - just crash right + // here. crbug.com/690140 + CHECK(!in_mash); + return true; }
diff --git a/chrome/browser/chromeos/policy/device_system_use_24hour_clock_browsertest.cc b/chrome/browser/chromeos/policy/device_system_use_24hour_clock_browsertest.cc index 00f26a3..dbeb6870 100644 --- a/chrome/browser/chromeos/policy/device_system_use_24hour_clock_browsertest.cc +++ b/chrome/browser/chromeos/policy/device_system_use_24hour_clock_browsertest.cc
@@ -3,7 +3,6 @@ // found in the LICENSE file. #include "ash/common/login_status.h" -#include "ash/common/material_design/material_design_controller.h" #include "ash/common/system/date/date_default_view.h" #include "ash/common/system/date/date_view.h" #include "ash/common/system/date/system_info_default_view.h" @@ -77,79 +76,43 @@ } static base::HourClockType TestGetPrimarySystemTrayTimeHourType() { - if (ash::MaterialDesignController::IsSystemTrayMenuMaterial()) { - const ash::TraySystemInfo* tray_system_info = - ash::Shell::GetInstance() - ->GetPrimarySystemTray() - ->GetTraySystemInfoForTesting(); - const ash::tray::TimeView* time_tray = - tray_system_info->GetTimeTrayForTesting(); - - return time_tray->GetHourTypeForTesting(); - } - - const ash::TrayDate* tray_date = ash::Shell::GetInstance() - ->GetPrimarySystemTray() - ->GetTrayDateForTesting(); - const ash::tray::TimeView* time_tray = tray_date->GetTimeTrayForTesting(); + const ash::TraySystemInfo* tray_system_info = + ash::Shell::GetInstance() + ->GetPrimarySystemTray() + ->GetTraySystemInfoForTesting(); + const ash::tray::TimeView* time_tray = + tray_system_info->GetTimeTrayForTesting(); return time_tray->GetHourTypeForTesting(); } static bool TestPrimarySystemTrayHasDateDefaultView() { - if (ash::MaterialDesignController::IsSystemTrayMenuMaterial()) { - const ash::TraySystemInfo* tray_system_info = - ash::Shell::GetInstance() - ->GetPrimarySystemTray() - ->GetTraySystemInfoForTesting(); - const ash::SystemInfoDefaultView* system_info_default_view = - tray_system_info->GetDefaultViewForTesting(); - return system_info_default_view != nullptr; - } - - const ash::TrayDate* tray_date = ash::Shell::GetInstance() - ->GetPrimarySystemTray() - ->GetTrayDateForTesting(); - const ash::DateDefaultView* date_default_view = - tray_date->GetDefaultViewForTesting(); - return date_default_view != nullptr; + const ash::TraySystemInfo* tray_system_info = + ash::Shell::GetInstance() + ->GetPrimarySystemTray() + ->GetTraySystemInfoForTesting(); + const ash::SystemInfoDefaultView* system_info_default_view = + tray_system_info->GetDefaultViewForTesting(); + return system_info_default_view != nullptr; } static void TestPrimarySystemTrayCreateDefaultView() { - if (ash::MaterialDesignController::IsSystemTrayMenuMaterial()) { - ash::TraySystemInfo* tray_system_info = - ash::Shell::GetInstance() - ->GetPrimarySystemTray() - ->GetTraySystemInfoForTesting(); - tray_system_info->CreateDefaultViewForTesting( - ash::LoginStatus::NOT_LOGGED_IN); - } else { - ash::TrayDate* tray_date = ash::Shell::GetInstance() - ->GetPrimarySystemTray() - ->GetTrayDateForTesting(); - tray_date->CreateDefaultViewForTesting(ash::LoginStatus::NOT_LOGGED_IN); - } + ash::TraySystemInfo* tray_system_info = ash::Shell::GetInstance() + ->GetPrimarySystemTray() + ->GetTraySystemInfoForTesting(); + tray_system_info->CreateDefaultViewForTesting( + ash::LoginStatus::NOT_LOGGED_IN); } static base::HourClockType TestGetPrimarySystemTrayDateHourType() { - if (ash::MaterialDesignController::IsSystemTrayMenuMaterial()) { - const ash::TraySystemInfo* tray_system_info = - ash::Shell::GetInstance() - ->GetPrimarySystemTray() - ->GetTraySystemInfoForTesting(); - const ash::SystemInfoDefaultView* system_info_default_view = - tray_system_info->GetDefaultViewForTesting(); + const ash::TraySystemInfo* tray_system_info = + ash::Shell::GetInstance() + ->GetPrimarySystemTray() + ->GetTraySystemInfoForTesting(); + const ash::SystemInfoDefaultView* system_info_default_view = + tray_system_info->GetDefaultViewForTesting(); - return system_info_default_view->GetDateView()->GetHourTypeForTesting(); - } - - const ash::TrayDate* tray_date = ash::Shell::GetInstance() - ->GetPrimarySystemTray() - ->GetTrayDateForTesting(); - const ash::DateDefaultView* date_default_view = - tray_date->GetDefaultViewForTesting(); - - return date_default_view->GetDateView()->GetHourTypeForTesting(); + return system_info_default_view->GetDateView()->GetHourTypeForTesting(); } private:
diff --git a/chromeos/printing/fake_printer_discoverer.cc b/chrome/browser/chromeos/printing/fake_printer_discoverer.cc similarity index 95% rename from chromeos/printing/fake_printer_discoverer.cc rename to chrome/browser/chromeos/printing/fake_printer_discoverer.cc index 53828d5..7126f92c 100644 --- a/chromeos/printing/fake_printer_discoverer.cc +++ b/chrome/browser/chromeos/printing/fake_printer_discoverer.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chromeos/printing/fake_printer_discoverer.h" +#include "chrome/browser/chromeos/printing/fake_printer_discoverer.h" #include <algorithm> #include <iterator> @@ -13,7 +13,7 @@ #include "base/strings/stringprintf.h" #include "base/threading/sequenced_task_runner_handle.h" #include "base/time/time.h" -#include "chromeos/printing/printer_discoverer.h" +#include "chrome/browser/chromeos/printing/printer_discoverer.h" namespace chromeos {
diff --git a/chromeos/printing/fake_printer_discoverer.h b/chrome/browser/chromeos/printing/fake_printer_discoverer.h similarity index 78% rename from chromeos/printing/fake_printer_discoverer.h rename to chrome/browser/chromeos/printing/fake_printer_discoverer.h index d20b39e2..d7f857e 100644 --- a/chromeos/printing/fake_printer_discoverer.h +++ b/chrome/browser/chromeos/printing/fake_printer_discoverer.h
@@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROMEOS_PRINTING_FAKE_PRINTER_DISCOVERER_H_ -#define CHROMEOS_PRINTING_FAKE_PRINTER_DISCOVERER_H_ +#ifndef CHROME_BROWSER_CHROMEOS_PRINTING_FAKE_PRINTER_DISCOVERER_H_ +#define CHROME_BROWSER_CHROMEOS_PRINTING_FAKE_PRINTER_DISCOVERER_H_ #include <vector> #include "base/macros.h" #include "base/memory/weak_ptr.h" +#include "chrome/browser/chromeos/printing/printer_discoverer.h" #include "chromeos/printing/printer_configuration.h" -#include "chromeos/printing/printer_discoverer.h" namespace chromeos { @@ -38,4 +38,4 @@ } // namespace chromeos -#endif // CHROMEOS_PRINTING_FAKE_PRINTER_DISCOVERER_H_ +#endif // CHROME_BROWSER_CHROMEOS_PRINTING_FAKE_PRINTER_DISCOVERER_H_
diff --git a/chromeos/printing/printer_discoverer.h b/chrome/browser/chromeos/printing/printer_discoverer.h similarity index 91% rename from chromeos/printing/printer_discoverer.h rename to chrome/browser/chromeos/printing/printer_discoverer.h index 6d9929a..b0a8639 100644 --- a/chromeos/printing/printer_discoverer.h +++ b/chrome/browser/chromeos/printing/printer_discoverer.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROMEOS_PRINTING_PRINTER_DISCOVERER_H_ -#define CHROMEOS_PRINTING_PRINTER_DISCOVERER_H_ +#ifndef CHROME_BROWSER_CHROMEOS_PRINTING_PRINTER_DISCOVERER_H_ +#define CHROME_BROWSER_CHROMEOS_PRINTING_PRINTER_DISCOVERER_H_ #include <memory> #include <vector> @@ -62,4 +62,4 @@ } // namespace chromeos -#endif // CHROMEOS_PRINTING_PRINTER_DISCOVERER_H_ +#endif // CHROME_BROWSER_CHROMEOS_PRINTING_PRINTER_DISCOVERER_H_
diff --git a/chrome/browser/chromeos/shutdown_policy_browsertest.cc b/chrome/browser/chromeos/shutdown_policy_browsertest.cc index 50dbf70..ec37e71 100644 --- a/chrome/browser/chromeos/shutdown_policy_browsertest.cc +++ b/chrome/browser/chromeos/shutdown_policy_browsertest.cc
@@ -6,7 +6,6 @@ #include <string> #include "ash/common/login_status.h" -#include "ash/common/material_design/material_design_controller.h" #include "ash/common/strings/grit/ash_strings.h" #include "ash/common/system/date/date_default_view.h" #include "ash/common/system/date/tray_date.h" @@ -160,12 +159,7 @@ // Gets the shutdown button view. const views::View* GetShutdownButton() { ash::SystemTray* tray = ash::Shell::GetInstance()->GetPrimarySystemTray(); - if (ash::MaterialDesignController::IsSystemTrayMenuMaterial()) { - return tray->GetTrayTilesForTesting() - ->GetDefaultViewForTesting() - ->GetShutdownButtonViewForTest(); - } - return tray->GetTrayDateForTesting() + return tray->GetTrayTilesForTesting() ->GetDefaultViewForTesting() ->GetShutdownButtonViewForTest(); }
diff --git a/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc b/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc index 64fb0d3..8b85658 100644 --- a/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc +++ b/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc
@@ -4,7 +4,6 @@ #include "ash/common/accessibility_types.h" #include "ash/common/login_status.h" -#include "ash/common/material_design/material_design_controller.h" #include "ash/common/system/tray/system_tray.h" #include "ash/common/system/tray_accessibility.h" #include "ash/common/test/test_session_state_delegate.h" @@ -240,23 +239,17 @@ } // In material design we show the help button but theme it as disabled if - // it is not possible to load the the help page. + // it is not possible to load the help page. bool IsHelpAvailableOnDetailMenu() const { - if (ash::MaterialDesignController::IsSystemTrayMenuMaterial()) { - return tray()->detailed_menu_->help_view_->state() == - views::Button::STATE_NORMAL; - } - return tray()->detailed_menu_->help_view_; + return tray()->detailed_menu_->help_view_->state() == + views::Button::STATE_NORMAL; } // In material design we show the settings button but theme it as disabled if - // it is not possible to load the the settings page. + // it is not possible to load the settings page. bool IsSettingsAvailableOnDetailMenu() const { - if (ash::MaterialDesignController::IsSystemTrayMenuMaterial()) { - return tray()->detailed_menu_->settings_view_->state() == - views::Button::STATE_NORMAL; - } - return tray()->detailed_menu_->settings_view_; + return tray()->detailed_menu_->settings_view_->state() == + views::Button::STATE_NORMAL; } bool IsNotificationShown() const {
diff --git a/chrome/browser/component_updater/recovery_component_installer.cc b/chrome/browser/component_updater/recovery_component_installer.cc index 868e5c7e..9f4e58d 100644 --- a/chrome/browser/component_updater/recovery_component_installer.cc +++ b/chrome/browser/component_updater/recovery_component_installer.cc
@@ -493,7 +493,8 @@ void RegisterRecoveryComponent(ComponentUpdateService* cus, PrefService* prefs) { -#if !defined(OS_CHROMEOS) && defined(GOOGLE_CHROME_BUILD) +#if defined(GOOGLE_CHROME_BUILD) +#if defined(OS_WIN) || defined(OS_MACOSX) if (SimulatingElevatedRecovery()) { BrowserThread::PostTask( BrowserThread::UI, @@ -508,7 +509,8 @@ FROM_HERE, base::Bind(&RecoveryRegisterHelper, cus, prefs), base::TimeDelta::FromSeconds(6)); -#endif // !defined(OS_CHROMEOS) && defined(GOOGLE_CHROME_BUILD) +#endif +#endif } void RegisterPrefsForRecoveryComponent(PrefRegistrySimple* registry) {
diff --git a/chrome/browser/conflicts/module_event_sink_impl_win.cc b/chrome/browser/conflicts/module_event_sink_impl_win.cc index 808940332..d58475ba 100644 --- a/chrome/browser/conflicts/module_event_sink_impl_win.cc +++ b/chrome/browser/conflicts/module_event_sink_impl_win.cc
@@ -64,7 +64,7 @@ const void* typed_address = reinterpret_cast<const void*>(static_cast<uintptr_t>(address)); SIZE_T bytes_read = 0; - if (!::ReadProcessMemory(process, typed_address, &data, sizeof(data), + if (!::ReadProcessMemory(process, typed_address, data, sizeof(data), &bytes_read)) { return false; }
diff --git a/chrome/browser/metrics/chrome_metrics_service_client.cc b/chrome/browser/metrics/chrome_metrics_service_client.cc index 22aeeb2..4dcbb75c 100644 --- a/chrome/browser/metrics/chrome_metrics_service_client.cc +++ b/chrome/browser/metrics/chrome_metrics_service_client.cc
@@ -41,6 +41,7 @@ #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/safe_browsing/certificate_reporting_metrics_provider.h" #include "chrome/browser/sync/chrome_sync_client.h" +#include "chrome/browser/sync/profile_sync_service_factory.h" #include "chrome/browser/ui/browser_otr_state.h" #include "chrome/common/channel_info.h" #include "chrome/common/chrome_paths.h" @@ -50,6 +51,7 @@ #include "chrome/common/features.h" #include "chrome/common/pref_names.h" #include "chrome/installer/util/util_constants.h" +#include "components/browser_sync/profile_sync_service.h" #include "components/browser_watcher/stability_debugging.h" #include "components/history/core/browser/history_service.h" #include "components/metrics/call_stack_profile_metrics_provider.h" @@ -895,15 +897,19 @@ content::NotificationService::AllBrowserContextsAndSources()); for (Profile* profile : g_browser_process->profile_manager()->GetLoadedProfiles()) { - RegisterForHistoryDeletions(profile); + RegisterForProfileEvents(profile); } } -void ChromeMetricsServiceClient::RegisterForHistoryDeletions(Profile* profile) { +void ChromeMetricsServiceClient::RegisterForProfileEvents(Profile* profile) { history::HistoryService* history_service = HistoryServiceFactory::GetForProfile(profile, ServiceAccessType::IMPLICIT_ACCESS); ObserveServiceForDeletions(history_service); + browser_sync::ProfileSyncService* sync = + ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile); + if (sync) + ObserveServiceForSyncDisables(static_cast<syncer::SyncService*>(sync)); } void ChromeMetricsServiceClient::Observe( @@ -925,7 +931,7 @@ break; case chrome::NOTIFICATION_PROFILE_ADDED: - RegisterForHistoryDeletions(content::Source<Profile>(source).ptr()); + RegisterForProfileEvents(content::Source<Profile>(source).ptr()); break; default: @@ -945,3 +951,14 @@ if (ukm_service_) ukm_service_->Purge(); } + +void ChromeMetricsServiceClient::OnSyncPrefsChanged(bool must_purge) { + if (!ukm_service_) + return; + if (must_purge) { + ukm_service_->Purge(); + ukm_service_->ResetClientId(); + } + // Signal service manager to enable/disable UKM based on new state. + UpdateRunningServices(); +}
diff --git a/chrome/browser/metrics/chrome_metrics_service_client.h b/chrome/browser/metrics/chrome_metrics_service_client.h index 6f12e37..61dae93a 100644 --- a/chrome/browser/metrics/chrome_metrics_service_client.h +++ b/chrome/browser/metrics/chrome_metrics_service_client.h
@@ -23,6 +23,7 @@ #include "components/metrics/proto/system_profile.pb.h" #include "components/omnibox/browser/omnibox_event_global_tracker.h" #include "components/ukm/observers/history_delete_observer.h" +#include "components/ukm/observers/sync_disable_observer.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" #include "ppapi/features/features.h" @@ -50,7 +51,8 @@ class ChromeMetricsServiceClient : public metrics::MetricsServiceClient, public metrics::TrackingSynchronizerObserver, public content::NotificationObserver, - public ukm::HistoryDeleteObserver { + public ukm::HistoryDeleteObserver, + public ukm::SyncDisableObserver { public: ~ChromeMetricsServiceClient() override; @@ -86,9 +88,12 @@ metrics::EnableMetricsDefault GetMetricsReportingDefaultState() override; bool IsUMACellularUploadLogicEnabled() override; - // ukm::HistoryDeleteObserver + // ukm::HistoryDeleteObserver: void OnHistoryDeleted() override; + // ukm::SyncDisableObserver: + void OnSyncPrefsChanged(bool must_purge) override; + // Persistent browser metrics need to be persisted somewhere. This constant // provides a known string to be used for both the allocator's internal name // and for a file on disk (relative to chrome::DIR_USER_DATA) to which they @@ -142,8 +147,8 @@ // there was recent activity. void RegisterForNotifications(); - // Call to listen for history deletions by the selected profile. - void RegisterForHistoryDeletions(Profile* profile); + // Call to listen for events on the selected profile's services. + void RegisterForProfileEvents(Profile* profile); // content::NotificationObserver: void Observe(int type,
diff --git a/chrome/browser/permissions/permission_blacklist_client.cc b/chrome/browser/permissions/permission_blacklist_client.cc index 35386710..4262df65d 100644 --- a/chrome/browser/permissions/permission_blacklist_client.cc +++ b/chrome/browser/permissions/permission_blacklist_client.cc
@@ -9,7 +9,10 @@ #include "base/logging.h" #include "base/memory/ptr_util.h" +#include "base/timer/elapsed_timer.h" #include "base/timer/timer.h" +#include "chrome/browser/permissions/permission_uma_util.h" +#include "chrome/browser/permissions/permission_util.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/web_contents.h" #include "url/gurl.h" @@ -57,6 +60,7 @@ // empty response if Safe Browsing times out. safe_browsing::ThreatMetadata empty_metadata; timer_ = base::MakeUnique<base::OneShotTimer>(); + elapsed_timer_.reset(new base::ElapsedTimer()); timer_->Start( FROM_HERE, base::TimeDelta::FromMilliseconds(timeout_), base::Bind(&PermissionBlacklistClient::OnCheckApiBlacklistUrlResult, this, @@ -71,17 +75,26 @@ const GURL& url, const safe_browsing::ThreatMetadata& metadata) { DCHECK_CURRENTLY_ON(content::BrowserThread::IO); - if (timer_->IsRunning()) - timer_->Stop(); - else - db_manager_->CancelApiCheck(this); - timer_.reset(nullptr); + base::TimeDelta response_time = elapsed_timer_->Elapsed(); + SafeBrowsingResponse response = SafeBrowsingResponse::NOT_BLACKLISTED; + + if (timer_->IsRunning()) { + timer_->Stop(); + } else { + db_manager_->CancelApiCheck(this); + response = SafeBrowsingResponse::TIMEOUT; + } + + timer_.reset(nullptr); bool permission_blocked = metadata.api_permissions.find( PermissionUtil::ConvertPermissionTypeToSafeBrowsingName( permission_type_)) != metadata.api_permissions.end(); + if (permission_blocked) + response = SafeBrowsingResponse::BLACKLISTED; + PermissionUmaUtil::RecordSafeBrowsingResponse(response_time, response); content::BrowserThread::PostTask( content::BrowserThread::UI, FROM_HERE, base::Bind(&PermissionBlacklistClient::EvaluateBlacklistResultOnUiThread, @@ -89,11 +102,11 @@ } void PermissionBlacklistClient::EvaluateBlacklistResultOnUiThread( - bool permission_blocked) { + bool response) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); if (is_active_) - callback_.Run(permission_blocked); + callback_.Run(response); Release(); }
diff --git a/chrome/browser/permissions/permission_blacklist_client.h b/chrome/browser/permissions/permission_blacklist_client.h index 2396143..1d3f080 100644 --- a/chrome/browser/permissions/permission_blacklist_client.h +++ b/chrome/browser/permissions/permission_blacklist_client.h
@@ -5,9 +5,10 @@ #ifndef CHROME_BROWSER_PERMISSIONS_PERMISSION_BLACKLIST_CLIENT_H_ #define CHROME_BROWSER_PERMISSIONS_PERMISSION_BLACKLIST_CLIENT_H_ +#include <memory> + #include "base/callback.h" #include "base/memory/ref_counted.h" -#include "chrome/browser/permissions/permission_util.h" #include "components/safe_browsing_db/database_manager.h" #include "content/public/browser/permission_type.h" #include "content/public/browser/web_contents_observer.h" @@ -20,6 +21,7 @@ namespace base { class OneShotTimer; +class ElapsedTimer; } // The client used when checking whether a permission has been blacklisted by @@ -62,7 +64,7 @@ const GURL& url, const safe_browsing::ThreatMetadata& metadata) override; - void EvaluateBlacklistResultOnUiThread(bool permission_blocked); + void EvaluateBlacklistResultOnUiThread(bool response); // WebContentsObserver implementation. Sets a flag so that when the database // manager returns with a result, it won't attempt to run the callback with a @@ -78,6 +80,7 @@ // Timer to abort the Safe Browsing check if it takes too long. Created and // used on the IO Thread. std::unique_ptr<base::OneShotTimer> timer_; + std::unique_ptr<base::ElapsedTimer> elapsed_timer_; int timeout_; // True if |callback_| should be invoked, if web_contents() is destroyed, this
diff --git a/chrome/browser/permissions/permission_decision_auto_blocker_unittest.cc b/chrome/browser/permissions/permission_decision_auto_blocker_unittest.cc index 04b412c3..061a905 100644 --- a/chrome/browser/permissions/permission_decision_auto_blocker_unittest.cc +++ b/chrome/browser/permissions/permission_decision_auto_blocker_unittest.cc
@@ -8,9 +8,11 @@ #include "base/bind.h" #include "base/run_loop.h" +#include "base/test/histogram_tester.h" #include "base/test/scoped_feature_list.h" #include "base/test/simple_test_clock.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" +#include "chrome/browser/permissions/permission_uma_util.h" #include "chrome/browser/permissions/permission_util.h" #include "chrome/common/chrome_features.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h" @@ -265,6 +267,7 @@ // Test that an origin that has been blacklisted for a permission is embargoed. TEST_F(PermissionDecisionAutoBlockerUnitTest, TestUpdateEmbargoBlacklist) { GURL url("https://www.google.com"); + base::HistogramTester histograms; scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = new MockSafeBrowsingDatabaseManager(true /* perform_callback */, @@ -277,6 +280,33 @@ UpdateEmbargoedStatus(content::PermissionType::GEOLOCATION, url); EXPECT_TRUE(callback_was_run()); EXPECT_TRUE(last_embargoed_status()); + histograms.ExpectUniqueSample("Permissions.AutoBlocker.SafeBrowsingResponse", + SafeBrowsingResponse::BLACKLISTED, 1); + histograms.ExpectTotalCount( + "Permissions.AutoBlocker.SafeBrowsingResponseTime", 1); +} + +// Test that an origin that is blacklisted for a permission will not be placed +// under embargoed for another. +TEST_F(PermissionDecisionAutoBlockerUnitTest, TestRequestNotBlacklisted) { + GURL url("https://www.google.com"); + clock()->SetNow(base::Time::Now()); + base::HistogramTester histograms; + + scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = + new MockSafeBrowsingDatabaseManager(true /* perform_callback */, + true /* enabled */); + std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; + db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); + SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager, + 0 /* timeout in ms */); + + UpdateEmbargoedStatus(content::PermissionType::NOTIFICATIONS, url); + EXPECT_FALSE(last_embargoed_status()); + histograms.ExpectUniqueSample("Permissions.AutoBlocker.SafeBrowsingResponse", + SafeBrowsingResponse::NOT_BLACKLISTED, 1); + histograms.ExpectTotalCount( + "Permissions.AutoBlocker.SafeBrowsingResponseTime", 1); } // Check that IsUnderEmbargo returns the correct value when the embargo is set @@ -325,6 +355,7 @@ TEST_F(PermissionDecisionAutoBlockerUnitTest, TestDismissEmbargoBackoff) { GURL url("https://www.google.com"); clock()->SetNow(base::Time::Now()); + base::HistogramTester histograms; // Record some dismisses. EXPECT_FALSE(autoblocker()->RecordDismissAndEmbargo( @@ -342,6 +373,10 @@ EXPECT_TRUE( autoblocker()->IsUnderEmbargo(content::PermissionType::GEOLOCATION, url)); + histograms.ExpectTotalCount("Permissions.AutoBlocker.SafeBrowsingResponse", + 0); + histograms.ExpectTotalCount( + "Permissions.AutoBlocker.SafeBrowsingResponseTime", 0); // Accelerate time forward, check that the embargo status is lifted and the // request won't be automatically blocked. clock()->Advance(base::TimeDelta::FromDays(8)); @@ -359,6 +394,16 @@ clock()->Advance(base::TimeDelta::FromDays(8)); EXPECT_FALSE( autoblocker()->IsUnderEmbargo(content::PermissionType::GEOLOCATION, url)); + + // Record another dismiss, subsequent requests should be autoblocked again. + EXPECT_TRUE(autoblocker()->RecordDismissAndEmbargo( + url, content::PermissionType::GEOLOCATION)); + EXPECT_TRUE( + autoblocker()->IsUnderEmbargo(content::PermissionType::GEOLOCATION, url)); + histograms.ExpectTotalCount("Permissions.AutoBlocker.SafeBrowsingResponse", + 0); + histograms.ExpectTotalCount( + "Permissions.AutoBlocker.SafeBrowsingResponseTime", 0); } // Test the logic for a combination of blacklisting and dismissal embargo. @@ -390,6 +435,7 @@ TEST_F(PermissionDecisionAutoBlockerUnitTest, TestSafeBrowsingTimeout) { GURL url("https://www.google.com"); clock()->SetNow(base::Time::Now()); + base::HistogramTester histograms; scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = new MockSafeBrowsingDatabaseManager(false /* perform_callback */, @@ -404,6 +450,10 @@ EXPECT_FALSE(last_embargoed_status()); EXPECT_FALSE( autoblocker()->IsUnderEmbargo(content::PermissionType::GEOLOCATION, url)); + histograms.ExpectUniqueSample("Permissions.AutoBlocker.SafeBrowsingResponse", + SafeBrowsingResponse::TIMEOUT, 1); + histograms.ExpectTotalCount( + "Permissions.AutoBlocker.SafeBrowsingResponseTime", 1); db_manager->SetPerformCallback(true); SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager, 2000 /* timeout in ms */); @@ -412,7 +462,12 @@ UpdateEmbargoedStatus(content::PermissionType::GEOLOCATION, url); EXPECT_TRUE(callback_was_run()); EXPECT_TRUE(last_embargoed_status()); - + histograms.ExpectTotalCount("Permissions.AutoBlocker.SafeBrowsingResponse", + 2); + histograms.ExpectTotalCount( + "Permissions.AutoBlocker.SafeBrowsingResponseTime", 2); + histograms.ExpectBucketCount("Permissions.AutoBlocker.SafeBrowsingResponse", + SafeBrowsingResponse::BLACKLISTED, 1); clock()->Advance(base::TimeDelta::FromDays(1)); EXPECT_TRUE( autoblocker()->IsUnderEmbargo(content::PermissionType::GEOLOCATION, url)); @@ -505,3 +560,22 @@ EXPECT_TRUE(callback_was_run()); EXPECT_FALSE(last_embargoed_status()); } + +TEST_F(PermissionDecisionAutoBlockerUnitTest, TestSafeBrowsingResponse) { + GURL url("https://www.google.com"); + clock()->SetNow(base::Time::Now()); + base::HistogramTester histograms; + + scoped_refptr<MockSafeBrowsingDatabaseManager> db_manager = + new MockSafeBrowsingDatabaseManager(true /* perform_callback */, + true /* enabled */); + std::set<std::string> blacklisted_permissions{"GEOLOCATION"}; + db_manager->BlacklistUrlPermissions(url, blacklisted_permissions); + SetSafeBrowsingDatabaseManagerAndTimeoutForTesting(db_manager, + 0 /* timeout in ms */); + + UpdateEmbargoedStatus(content::PermissionType::NOTIFICATIONS, url); + EXPECT_FALSE(last_embargoed_status()); + histograms.ExpectUniqueSample("Permissions.AutoBlocker.SafeBrowsingResponse", + SafeBrowsingResponse::NOT_BLACKLISTED, 1); +}
diff --git a/chrome/browser/permissions/permission_uma_util.cc b/chrome/browser/permissions/permission_uma_util.cc index 82792775..ebc8810 100644 --- a/chrome/browser/permissions/permission_uma_util.cc +++ b/chrome/browser/permissions/permission_uma_util.cc
@@ -9,6 +9,7 @@ #include "base/command_line.h" #include "base/metrics/histogram_macros.h" #include "base/strings/stringprintf.h" +#include "base/time/time.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/permissions/permission_decision_auto_blocker.h" #include "chrome/browser/permissions/permission_manager.h" @@ -357,6 +358,15 @@ } } +void PermissionUmaUtil::RecordSafeBrowsingResponse( + base::TimeDelta response_time, + SafeBrowsingResponse response) { + UMA_HISTOGRAM_TIMES("Permissions.AutoBlocker.SafeBrowsingResponseTime", + response_time); + UMA_HISTOGRAM_ENUMERATION("Permissions.AutoBlocker.SafeBrowsingResponse", + response, SafeBrowsingResponse::RESPONSE_NUM); +} + void PermissionUmaUtil::PermissionPromptShown( const std::vector<PermissionRequest*>& requests) { DCHECK(!requests.empty());
diff --git a/chrome/browser/permissions/permission_uma_util.h b/chrome/browser/permissions/permission_uma_util.h index 61a08d9..8a603ef2 100644 --- a/chrome/browser/permissions/permission_uma_util.h +++ b/chrome/browser/permissions/permission_uma_util.h
@@ -9,6 +9,7 @@ #include "base/logging.h" #include "base/macros.h" +#include "base/time/time.h" #include "chrome/browser/permissions/permission_request.h" #include "chrome/browser/permissions/permission_util.h" @@ -41,6 +42,16 @@ NOT_PERSISTED = 2, }; +// Any new values should be inserted immediately prior to RESPONSE_NUM. +enum SafeBrowsingResponse { + NOT_BLACKLISTED = 0, + TIMEOUT = 1, + BLACKLISTED = 2, + + // Always keep this at the end. + RESPONSE_NUM, +}; + // A bundle for the information sent in a PermissionReport. struct PermissionReportInfo { PermissionReportInfo( @@ -114,7 +125,8 @@ PermissionSourceUI source_ui, const GURL& revoked_origin, Profile* profile); - + static void RecordSafeBrowsingResponse(base::TimeDelta response_time, + SafeBrowsingResponse response); // UMA specifically for when permission prompts are shown. This should be // roughly equivalent to the metrics above, however it is // useful to have separate UMA to a few reasons:
diff --git a/chrome/browser/resources/print_preview/native_layer.js b/chrome/browser/resources/print_preview/native_layer.js index 69ca087366..6b522fe1 100644 --- a/chrome/browser/resources/print_preview/native_layer.js +++ b/chrome/browser/resources/print_preview/native_layer.js
@@ -63,7 +63,6 @@ global.onDidPreviewPage = this.onDidPreviewPage_.bind(this); global.updatePrintPreview = this.onUpdatePrintPreview_.bind(this); global.onDidGetAccessToken = this.onDidGetAccessToken_.bind(this); - global.autoCancelForTesting = this.autoCancelForTesting_.bind(this); global.onPrivetPrinterChanged = this.onPrivetPrinterChanged_.bind(this); global.onPrivetCapabilitiesSet = this.onPrivetCapabilitiesSet_.bind(this); @@ -761,17 +760,6 @@ }, /** - * Simulates a user click on the print preview dialog cancel button. Used - * only for testing. - * @private - */ - autoCancelForTesting_: function() { - var properties = {view: window, bubbles: true, cancelable: true}; - var click = new MouseEvent('click', properties); - document.querySelector('#print-header .cancel').dispatchEvent(click); - }, - - /** * @param {{serviceName: string, name: string}} printer Specifies * information about the printer that was added. * @private
diff --git a/chrome/browser/resources/settings/device_page/storage.html b/chrome/browser/resources/settings/device_page/storage.html index 06f4a9b..32a1b88 100644 --- a/chrome/browser/resources/settings/device_page/storage.html +++ b/chrome/browser/resources/settings/device_page/storage.html
@@ -126,34 +126,36 @@ unicode-bidi: embed; } </style> - <div class="settings-box first" - hidden$="[[!isSpaceLow_(sizeStat_.spaceState)]]"> - <div class="message-area"> - <iron-icon icon="cr:warning"></iron-icon> - <div class="message"> - <div class="message-title">$i18n{storageSpaceLowMessageTitle}</div> - <div class="message-description"> - <span>$i18n{storageSpaceLowMessageLine1}</span> - <span>$i18n{storageSpaceLowMessageLine2}</span> + <template is="dom-if" if="[[isSpaceLow_(sizeStat_.spaceState)]]"> + <div class="settings-box first"> + <div class="message-area"> + <iron-icon icon="cr:warning"></iron-icon> + <div class="message"> + <div class="message-title">$i18n{storageSpaceLowMessageTitle}</div> + <div class="message-description"> + <span>$i18n{storageSpaceLowMessageLine1}</span> + <span>$i18n{storageSpaceLowMessageLine2}</span> + </div> </div> </div> </div> - </div> - <div class="settings-box first" - hidden$="[[!isSpaceCriticallyLow_(sizeStat_.spaceState)]]"> - <div id="criticallyLowMessage" class="message-area"> - <iron-icon icon="cr:warning"></iron-icon> - <div class="message"> - <div class="message-title"> - $i18n{storageSpaceCriticallyLowMessageTitle} - </div> - <div class="message-description"> - <span>$i18n{storageSpaceCriticallyLowMessageLine1}</span> - <span>$i18n{storageSpaceCriticallyLowMessageLine2}</span> + </template> + <template is="dom-if" if="[[isSpaceCriticallyLow_(sizeStat_.spaceState)]]"> + <div class="settings-box first"> + <div id="criticallyLowMessage" class="message-area"> + <iron-icon icon="cr:warning"></iron-icon> + <div class="message"> + <div class="message-title"> + $i18n{storageSpaceCriticallyLowMessageTitle} + </div> + <div class="message-description"> + <span>$i18n{storageSpaceCriticallyLowMessageLine1}</span> + <span>$i18n{storageSpaceCriticallyLowMessageLine2}</span> + </div> </div> </div> </div> - </div> + </template> <div class="settings-box first"> <div id="barArea"> <progress id="bar" class$="[[getBarClass_(sizeStat_.spaceState)]]" @@ -183,14 +185,15 @@ </div> <button class="icon-external" is="paper-icon-button-light"></button> </div> - <div class="settings-box" on-tap="onDriveCacheTap_" - hidden$="[[!driveEnabled_]]" actionable> - <div class="start">$i18n{storageItemDriveCache}</div> - <div id="driveCacheSize" class="storage-size"> - $i18n{storageSizeComputing} + <template is="dom-if" if="[[driveEnabled_]]"> + <div class="settings-box" on-tap="onDriveCacheTap_" actionable> + <div class="start">$i18n{storageItemDriveCache}</div> + <div id="driveCacheSize" class="storage-size"> + $i18n{storageSizeComputing} + </div> + <button class="subpage-arrow" is="paper-icon-button-light"></button> </div> - <button class="subpage-arrow" is="paper-icon-button-light"></button> - </div> + </template> <div class="settings-box" on-tap="onBrowsingDataTap_" actionable> <div class="start">$i18n{storageItemBrowsingData}</div> <div id="browsingDataSize" class="storage-size"> @@ -198,14 +201,15 @@ </div> <button class="subpage-arrow" is="paper-icon-button-light"></button> </div> - <div class="settings-box" on-tap="onAndroidTap_" - hidden$="[[!androidEnabled_]]" actionable> - <div class="start">$i18n{storageItemAndroid}</div> - <div id="androidSize" class="storage-size"> - $i18n{storageSizeComputing} + <template is="dom-if" if="[[androidEnabled_]]"> + <div class="settings-box" on-tap="onAndroidTap_" actionable> + <div class="start">$i18n{storageItemAndroid}</div> + <div id="androidSize" class="storage-size"> + $i18n{storageSizeComputing} + </div> + <button class="icon-external" is="paper-icon-button-light"></button> </div> - <button class="icon-external" is="paper-icon-button-light"></button> - </div> + </template> <template is="dom-if" if="[[!isGuest_]]"> <div class="settings-box" on-tap="onOtherUsersTap_" actionable> <div class="start">$i18n{storageItemOtherUsers}</div>
diff --git a/chrome/browser/resources/settings/device_page/storage.js b/chrome/browser/resources/settings/device_page/storage.js index 84453c6..6649b83 100644 --- a/chrome/browser/resources/settings/device_page/storage.js +++ b/chrome/browser/resources/settings/device_page/storage.js
@@ -82,9 +82,11 @@ cr.addWebUIListener( 'storage-android-size-changed', this.handleAndroidSizeChanged_.bind(this)); - cr.addWebUIListener( - 'storage-other-users-size-changed', - this.handleOtherUsersSizeChanged_.bind(this)); + if (!this.isGuest_) { + cr.addWebUIListener( + 'storage-other-users-size-changed', + this.handleOtherUsersSizeChanged_.bind(this)); + } cr.addWebUIListener( 'storage-drive-enabled-changed', this.handleDriveEnabledChanged_.bind(this)); @@ -178,7 +180,8 @@ * @private */ handleDriveCacheSizeChanged_: function(size) { - this.$.driveCacheSize.textContent = size; + if (this.driveEnabled_) + this.$$('#driveCacheSize').textContent = size; }, /** @@ -196,7 +199,8 @@ * @private */ handleAndroidSizeChanged_: function(size) { - this.$.androidSize.textContent = size; + if (this.androidEnabled_) + this.$$('#androidSize').textContent = size; }, /** @@ -204,7 +208,8 @@ * @private */ handleOtherUsersSizeChanged_: function(size) { - this.$.otherUsersSize.textContent = size; + if (!this.isGuest_) + this.$$('#otherUsersSize').textContent = size; }, /**
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 42588ca..9d661ca 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -1522,6 +1522,8 @@ "views/subtle_notification_view.h", "views/sync/bubble_sync_promo_view.cc", "views/sync/bubble_sync_promo_view.h", + "views/sync/profile_signin_confirmation_dialog_views.cc", + "views/sync/profile_signin_confirmation_dialog_views.h", "views/task_manager_view.cc", "views/task_manager_view.h", "views/update_recommended_message_box.cc", @@ -1571,8 +1573,6 @@ "views/screen_capture_notification_ui_views.cc", "views/sync/one_click_signin_dialog_view.cc", "views/sync/one_click_signin_dialog_view.h", - "views/sync/profile_signin_confirmation_dialog_views.cc", - "views/sync/profile_signin_confirmation_dialog_views.h", ] }
diff --git a/chrome/browser/ui/browser_tab_strip_tracker.cc b/chrome/browser/ui/browser_tab_strip_tracker.cc index 16a5327..9fd936a0 100644 --- a/chrome/browser/ui/browser_tab_strip_tracker.cc +++ b/chrome/browser/ui/browser_tab_strip_tracker.cc
@@ -61,6 +61,11 @@ if (!ShouldTrackBrowser(browser)) return; + // It's possible that a browser is added to the observed browser list twice. + // In this case it might cause crash as seen in crbug.com/685731. + if (browsers_observing_.find(browser) != browsers_observing_.end()) + return; + browsers_observing_.insert(browser); if (browser_list_observer_)
diff --git a/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_dialog_cocoa.h b/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_dialog_cocoa.h index 976ef13..e53c7cc9 100644 --- a/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_dialog_cocoa.h +++ b/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_dialog_cocoa.h
@@ -38,16 +38,17 @@ content::WebContents* web_contents, Profile* profile, const std::string& username, - ui::ProfileSigninConfirmationDelegate* delegate, + std::unique_ptr<ui::ProfileSigninConfirmationDelegate> delegate, bool offer_profile_creation); virtual ~ProfileSigninConfirmationDialogCocoa(); // Shows the dialog if needed. - static void Show(Browser* browser, - content::WebContents* web_contents, - Profile* profile, - const std::string& username, - ui::ProfileSigninConfirmationDelegate* delegate); + static void Show( + Browser* browser, + content::WebContents* web_contents, + Profile* profile, + const std::string& username, + std::unique_ptr<ui::ProfileSigninConfirmationDelegate> delegate); // Closes the dialog, which deletes itself. void Close();
diff --git a/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_dialog_cocoa.mm b/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_dialog_cocoa.mm index dbd031b..eab52ff 100644 --- a/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_dialog_cocoa.mm +++ b/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_dialog_cocoa.mm
@@ -16,19 +16,15 @@ namespace { // static -void ShowDialog( - Browser* browser, - content::WebContents* web_contents, - Profile* profile, - const std::string& username, - ui::ProfileSigninConfirmationDelegate* delegate, - bool offer_profile_creation) { +void ShowDialog(Browser* browser, + content::WebContents* web_contents, + Profile* profile, + const std::string& username, + std::unique_ptr<ui::ProfileSigninConfirmationDelegate> delegate, + bool offer_profile_creation) { // The dialog owns itself. - new ProfileSigninConfirmationDialogCocoa(browser, - web_contents, - profile, - username, - delegate, + new ProfileSigninConfirmationDialogCocoa(browser, web_contents, profile, + username, std::move(delegate), offer_profile_creation); } @@ -39,19 +35,18 @@ content::WebContents* web_contents, Profile* profile, const std::string& username, - ui::ProfileSigninConfirmationDelegate* delegate, + std::unique_ptr<ui::ProfileSigninConfirmationDelegate> delegate, bool offer_profile_creation) { // Setup the dialog view controller. const base::Closure& closeDialogCallback = base::Bind(&ProfileSigninConfirmationDialogCocoa::Close, base::Unretained(this)); - controller_.reset( - [[ProfileSigninConfirmationViewController alloc] - initWithBrowser:browser - username:username - delegate:delegate - closeDialogCallback:closeDialogCallback - offerProfileCreation:offer_profile_creation]); + controller_.reset([[ProfileSigninConfirmationViewController alloc] + initWithBrowser:browser + username:username + delegate:std::move(delegate) + closeDialogCallback:closeDialogCallback + offerProfileCreation:offer_profile_creation]); // Setup the constrained window that will show the view. base::scoped_nsobject<NSWindow> window([[ConstrainedWindowCustomWindow alloc] @@ -71,10 +66,10 @@ content::WebContents* web_contents, Profile* profile, const std::string& username, - ui::ProfileSigninConfirmationDelegate* delegate) { + std::unique_ptr<ui::ProfileSigninConfirmationDelegate> delegate) { ui::CheckShouldPromptForNewProfile( profile, base::Bind(ShowDialog, browser, web_contents, profile, username, - delegate)); + base::Passed(std::move(delegate)))); } void ProfileSigninConfirmationDialogCocoa::Close() {
diff --git a/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_view_controller.h b/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_view_controller.h index b3983610..39a1bdd 100644 --- a/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_view_controller.h +++ b/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_view_controller.h
@@ -6,6 +6,7 @@ #define CHROME_BROWSER_UI_COCOA_PROFILES_PROFILE_SIGNIN_CONFIRMATION_VIEW_CONTROLLER_H_ #import <Cocoa/Cocoa.h> +#include <memory> #include <string> #include "base/callback.h" @@ -33,7 +34,7 @@ bool offerProfileCreation_; // Dialog button callbacks. - ui::ProfileSigninConfirmationDelegate* delegate_; + std::unique_ptr<ui::ProfileSigninConfirmationDelegate> delegate_; base::Closure closeDialogCallback_; // UI elements. @@ -48,10 +49,12 @@ } - (id)initWithBrowser:(Browser*)browser - username:(const std::string&)username - delegate:(ui::ProfileSigninConfirmationDelegate*)delegate - closeDialogCallback:(const base::Closure&)closeDialogCallback - offerProfileCreation:(bool)offer; + username:(const std::string&)username + delegate: + (std::unique_ptr<ui::ProfileSigninConfirmationDelegate>) + delegate + closeDialogCallback:(const base::Closure&)closeDialogCallback + offerProfileCreation:(bool)offer; - (IBAction)cancel:(id)sender; - (IBAction)ok:(id)sender; - (IBAction)close:(id)sender; @@ -59,12 +62,4 @@ @end -@interface ProfileSigninConfirmationViewController (TestingAPI) - -@property(readonly, nonatomic) ui::ProfileSigninConfirmationDelegate* delegate; -@property(readonly, nonatomic) NSButton* createProfileButton; -@property(readonly, nonatomic) NSTextView* explanationField; - -@end - #endif // CHROME_BROWSER_UI_COCOA_PROFILES_PROFILE_SIGNIN_CONFIRMATION_VIEW_CONTROLLER_H_
diff --git a/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_view_controller.mm b/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_view_controller.mm index 5a7480f..28f0873 100644 --- a/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_view_controller.mm +++ b/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_view_controller.mm
@@ -142,14 +142,16 @@ @implementation ProfileSigninConfirmationViewController - (id)initWithBrowser:(Browser*)browser - username:(const std::string&)username - delegate:(ui::ProfileSigninConfirmationDelegate*)delegate - closeDialogCallback:(const base::Closure&)closeDialogCallback - offerProfileCreation:(bool)offer { + username:(const std::string&)username + delegate: + (std::unique_ptr<ui::ProfileSigninConfirmationDelegate>) + delegate + closeDialogCallback:(const base::Closure&)closeDialogCallback + offerProfileCreation:(bool)offer { if ((self = [super initWithNibName:nil bundle:nil])) { browser_ = browser; username_ = username; - delegate_ = delegate; + delegate_ = std::move(delegate); closeDialogCallback_ = closeDialogCallback; offerProfileCreation_ = offer; } @@ -376,7 +378,7 @@ - (IBAction)cancel:(id)sender { if (delegate_) { delegate_->OnCancelSignin(); - delegate_ = NULL; + delegate_ = nullptr; closeDialogCallback_.Run(); } } @@ -384,7 +386,7 @@ - (IBAction)ok:(id)sender { if (delegate_) { delegate_->OnContinueSignin(); - delegate_ = NULL; + delegate_ = nullptr; closeDialogCallback_.Run(); } } @@ -392,7 +394,7 @@ - (IBAction)close:(id)sender { if (delegate_) { delegate_->OnCancelSignin(); - delegate_ = NULL; + delegate_ = nullptr; } closeDialogCallback_.Run(); } @@ -400,7 +402,7 @@ - (IBAction)createProfile:(id)sender { if (delegate_) { delegate_->OnSigninWithNewProfile(); - delegate_ = NULL; + delegate_ = nullptr; closeDialogCallback_.Run(); } } @@ -440,19 +442,3 @@ } @end - -@implementation ProfileSigninConfirmationViewController (TestingAPI) - -- (ui::ProfileSigninConfirmationDelegate*)delegate { - return delegate_; -} - -- (NSButton*)createProfileButton { - return createProfileButton_.get(); -} - -- (NSTextView*)explanationField { - return explanationField_.get(); -} - -@end
diff --git a/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_view_controller_browsertest.mm b/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_view_controller_browsertest.mm index 6380427..4311f676 100644 --- a/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_view_controller_browsertest.mm +++ b/chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_view_controller_browsertest.mm
@@ -18,10 +18,32 @@ #import "testing/gtest_mac.h" #include "ui/base/l10n/l10n_util.h" -class ProfileSigninConfirmationViewControllerTest - : public InProcessBrowserTest, - public ui::ProfileSigninConfirmationDelegate { +@interface ProfileSigninConfirmationViewController (TestingAPI) +@property(readonly, nonatomic) ui::ProfileSigninConfirmationDelegate* delegate; +@property(readonly, nonatomic) NSButton* createProfileButton; +@property(readonly, nonatomic) NSTextView* explanationField; + +@end + +@implementation ProfileSigninConfirmationViewController (TestingAPI) + +- (ui::ProfileSigninConfirmationDelegate*)delegate { + return delegate_.get(); +} + +- (NSButton*)createProfileButton { + return createProfileButton_.get(); +} + +- (NSTextView*)explanationField { + return explanationField_.get(); +} + +@end + +class ProfileSigninConfirmationViewControllerTest + : public InProcessBrowserTest { public: ProfileSigninConfirmationViewControllerTest() : window_(nil), @@ -44,11 +66,11 @@ &ProfileSigninConfirmationViewControllerTest::OnClose, base::Unretained(this)); controller_.reset([[ProfileSigninConfirmationViewController alloc] - initWithBrowser:browser() - username:username() - delegate:this - closeDialogCallback:close - offerProfileCreation:offerProfileCreation]); + initWithBrowser:browser() + username:username() + delegate:base::MakeUnique<TestSigninDelegate>(this) + closeDialogCallback:close + offerProfileCreation:offerProfileCreation]); [[window_ contentView] addSubview:[controller_ view]]; [window_ makeKeyAndOrderFront:NSApp]; ASSERT_TRUE([window_ isVisible]); @@ -63,10 +85,6 @@ IDS_ENTERPRISE_SIGNIN_PROFILE_LINK_LEARN_MORE); } - // ui::ProfileSigninConfirmationDelegate: - void OnContinueSignin() override { continued_ = true; } - void OnCancelSignin() override { cancelled_ = true; } - void OnSigninWithNewProfile() override { created_ = true; } void OnClose() { closed_ = true; } // The window containing the dialog. @@ -82,6 +100,23 @@ bool closed_; private: + class TestSigninDelegate : public ui::ProfileSigninConfirmationDelegate { + public: + explicit TestSigninDelegate( + ProfileSigninConfirmationViewControllerTest* client) + : client_(client) {} + + // ui::ProfileSigninConfirmationDelegate: + void OnContinueSignin() override { client_->continued_ = true; } + void OnCancelSignin() override { client_->cancelled_ = true; } + void OnSigninWithNewProfile() override { client_->created_ = true; } + + private: + ProfileSigninConfirmationViewControllerTest* client_; + + DISALLOW_COPY_AND_ASSIGN(TestSigninDelegate); + }; + DISALLOW_COPY_AND_ASSIGN(ProfileSigninConfirmationViewControllerTest); };
diff --git a/chrome/browser/ui/cocoa/tab_dialogs_cocoa.h b/chrome/browser/ui/cocoa/tab_dialogs_cocoa.h index 1eb2bd5..4d81b16 100644 --- a/chrome/browser/ui/cocoa/tab_dialogs_cocoa.h +++ b/chrome/browser/ui/cocoa/tab_dialogs_cocoa.h
@@ -24,7 +24,7 @@ Browser* browser, Profile* profile, const std::string& username, - ui::ProfileSigninConfirmationDelegate* delegate) override; + std::unique_ptr<ui::ProfileSigninConfirmationDelegate> delegate) override; void ShowManagePasswordsBubble(bool user_action) override; void HideManagePasswordsBubble() override; base::WeakPtr<ValidationMessageBubble> ShowValidationMessage(
diff --git a/chrome/browser/ui/cocoa/tab_dialogs_cocoa.mm b/chrome/browser/ui/cocoa/tab_dialogs_cocoa.mm index bc20ecf6..a66b2ee 100644 --- a/chrome/browser/ui/cocoa/tab_dialogs_cocoa.mm +++ b/chrome/browser/ui/cocoa/tab_dialogs_cocoa.mm
@@ -11,6 +11,7 @@ #import "chrome/browser/ui/cocoa/profiles/profile_signin_confirmation_dialog_cocoa.h" #include "chrome/browser/ui/cocoa/tab_dialogs_views_mac.h" #import "chrome/browser/ui/cocoa/validation_message_bubble_cocoa.h" +#include "chrome/browser/ui/sync/profile_signin_confirmation_helper.h" #include "content/public/browser/web_contents.h" #include "ui/base/material_design/material_design_controller.h" @@ -64,9 +65,9 @@ Browser* browser, Profile* profile, const std::string& username, - ui::ProfileSigninConfirmationDelegate* delegate) { - ProfileSigninConfirmationDialogCocoa::Show( - browser, web_contents_, profile, username, delegate); + std::unique_ptr<ui::ProfileSigninConfirmationDelegate> delegate) { + ProfileSigninConfirmationDialogCocoa::Show(browser, web_contents_, profile, + username, std::move(delegate)); } void TabDialogsCocoa::ShowManagePasswordsBubble(bool user_action) {
diff --git a/chrome/browser/ui/cocoa/tab_dialogs_views_mac.h b/chrome/browser/ui/cocoa/tab_dialogs_views_mac.h index 622777c..980201b 100644 --- a/chrome/browser/ui/cocoa/tab_dialogs_views_mac.h +++ b/chrome/browser/ui/cocoa/tab_dialogs_views_mac.h
@@ -15,6 +15,11 @@ // TabDialogs: void ShowCollectedCookies() override; + void ShowProfileSigninConfirmation( + Browser* browser, + Profile* profile, + const std::string& username, + std::unique_ptr<ui::ProfileSigninConfirmationDelegate> delegate) override; private: DISALLOW_COPY_AND_ASSIGN(TabDialogsViewsMac);
diff --git a/chrome/browser/ui/cocoa/tab_dialogs_views_mac.mm b/chrome/browser/ui/cocoa/tab_dialogs_views_mac.mm index 6187e48..d71c1f2 100644 --- a/chrome/browser/ui/cocoa/tab_dialogs_views_mac.mm +++ b/chrome/browser/ui/cocoa/tab_dialogs_views_mac.mm
@@ -5,6 +5,7 @@ #include "chrome/browser/ui/cocoa/tab_dialogs_views_mac.h" #include "chrome/browser/ui/views/collected_cookies_views.h" +#include "chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.h" TabDialogsViewsMac::TabDialogsViewsMac(content::WebContents* contents) : TabDialogsCocoa(contents) {} @@ -15,3 +16,12 @@ // Deletes itself on close. new CollectedCookiesViews(web_contents()); } + +void TabDialogsViewsMac::ShowProfileSigninConfirmation( + Browser* browser, + Profile* profile, + const std::string& username, + std::unique_ptr<ui::ProfileSigninConfirmationDelegate> delegate) { + ProfileSigninConfirmationDialogViews::ShowDialog(browser, profile, username, + std::move(delegate)); +}
diff --git a/chrome/browser/ui/collected_cookies_browsertest.cc b/chrome/browser/ui/collected_cookies_browsertest.cc index 0316265..e946733 100644 --- a/chrome/browser/ui/collected_cookies_browsertest.cc +++ b/chrome/browser/ui/collected_cookies_browsertest.cc
@@ -22,7 +22,7 @@ public: CollectedCookiesTest() {} - // TestDialogInterface: + // DialogBrowserTest: void ShowDialog(const std::string& name) override { ASSERT_TRUE(embedded_test_server()->Start());
diff --git a/chrome/browser/ui/sync/one_click_signin_sync_starter.cc b/chrome/browser/ui/sync/one_click_signin_sync_starter.cc index 1ad06fa..4933765 100644 --- a/chrome/browser/ui/sync/one_click_signin_sync_starter.cc +++ b/chrome/browser/ui/sync/one_click_signin_sync_starter.cc
@@ -241,11 +241,11 @@ content::RecordAction( base::UserMetricsAction("Signin_Show_EnterpriseAccountPrompt")); - TabDialogs::FromWebContents(web_contents)->ShowProfileSigninConfirmation( - browser_, - profile_, - signin->GetUsernameForAuthInProgress(), - new SigninDialogDelegate(weak_pointer_factory_.GetWeakPtr())); + TabDialogs::FromWebContents(web_contents) + ->ShowProfileSigninConfirmation(browser_, profile_, + signin->GetUsernameForAuthInProgress(), + base::MakeUnique<SigninDialogDelegate>( + weak_pointer_factory_.GetWeakPtr())); } void OneClickSigninSyncStarter::LoadPolicyWithCachedCredentials() {
diff --git a/chrome/browser/ui/tab_dialogs.h b/chrome/browser/ui/tab_dialogs.h index ca3fec18b..41ac3c1 100644 --- a/chrome/browser/ui/tab_dialogs.h +++ b/chrome/browser/ui/tab_dialogs.h
@@ -59,7 +59,7 @@ Browser* browser, Profile* profile, const std::string& username, - ui::ProfileSigninConfirmationDelegate* delegate) = 0; + std::unique_ptr<ui::ProfileSigninConfirmationDelegate> delegate) = 0; // Shows or hides the ManagePasswords bubble. // Pass true for |user_action| if this is a user initiated action.
diff --git a/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc index 1ee37be..774b60956 100644 --- a/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc +++ b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc
@@ -13,7 +13,6 @@ #include "chrome/browser/ui/browser_navigator.h" #include "chrome/browser/ui/browser_navigator_params.h" #include "chrome/browser/ui/browser_window.h" -#include "chrome/browser/ui/views/profiles/profile_chooser_view.h" #include "chrome/grit/chromium_strings.h" #include "chrome/grit/generated_resources.h" #include "components/constrained_window/constrained_window_views.h" @@ -22,6 +21,7 @@ #include "google_apis/gaia/gaia_auth_util.h" #include "third_party/skia/include/core/SkColor.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/base/ui_features.h" #include "ui/gfx/font.h" #include "ui/gfx/native_widget_types.h" #include "ui/gfx/range/range.h" @@ -36,13 +36,17 @@ #include "ui/views/widget/widget.h" #include "ui/views/window/dialog_client_view.h" +#if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER) +#include "chrome/browser/ui/views/profiles/profile_chooser_view.h" +#endif + ProfileSigninConfirmationDialogViews::ProfileSigninConfirmationDialogViews( Browser* browser, const std::string& username, - ui::ProfileSigninConfirmationDelegate* delegate) + std::unique_ptr<ui::ProfileSigninConfirmationDelegate> delegate) : browser_(browser), username_(username), - delegate_(delegate), + delegate_(std::move(delegate)), prompt_for_new_profile_(true) {} ProfileSigninConfirmationDialogViews::~ProfileSigninConfirmationDialogViews() {} @@ -52,7 +56,8 @@ Browser* browser, Profile* profile, const std::string& username, - ui::ProfileSigninConfirmationDelegate* delegate) { + std::unique_ptr<ui::ProfileSigninConfirmationDelegate> delegate) { +#if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER) // Hides the new avatar bubble if it is currently shown. The new avatar bubble // should be automatically closed when it loses focus. However on windows the // profile signin confirmation dialog is not modal yet thus it does not take @@ -61,10 +66,11 @@ // TODO(guohui): removes the workaround once the profile confirmation dialog // is fixed. ProfileChooserView::Hide(); +#endif ProfileSigninConfirmationDialogViews* dialog = - new ProfileSigninConfirmationDialogViews( - browser, username, delegate); + new ProfileSigninConfirmationDialogViews(browser, username, + std::move(delegate)); ui::CheckShouldPromptForNewProfile( profile, // This callback is guaranteed to be invoked, and once it is, the dialog @@ -117,7 +123,7 @@ delegate_->OnSigninWithNewProfile(); else delegate_->OnContinueSignin(); - delegate_ = NULL; + delegate_ = nullptr; } return true; } @@ -125,7 +131,7 @@ bool ProfileSigninConfirmationDialogViews::Cancel() { if (delegate_) { delegate_->OnCancelSignin(); - delegate_ = NULL; + delegate_ = nullptr; } return true; } @@ -246,7 +252,7 @@ DCHECK(prompt_for_new_profile_); if (delegate_) { delegate_->OnContinueSignin(); - delegate_ = NULL; + delegate_ = nullptr; } GetWidget()->Close(); }
diff --git a/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.h b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.h index ffa5f579..a466abd 100644 --- a/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.h +++ b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.h
@@ -5,6 +5,8 @@ #ifndef CHROME_BROWSER_UI_VIEWS_SYNC_PROFILE_SIGNIN_CONFIRMATION_DIALOG_VIEWS_H_ #define CHROME_BROWSER_UI_VIEWS_SYNC_PROFILE_SIGNIN_CONFIRMATION_DIALOG_VIEWS_H_ +#include <memory> + #include "base/compiler_specific.h" #include "base/macros.h" #include "chrome/browser/ui/sync/profile_signin_confirmation_helper.h" @@ -23,16 +25,17 @@ public views::ButtonListener { public: // Create and show the dialog, which owns itself. - static void ShowDialog(Browser* browser, - Profile* profile, - const std::string& username, - ui::ProfileSigninConfirmationDelegate* delegate); + static void ShowDialog( + Browser* browser, + Profile* profile, + const std::string& username, + std::unique_ptr<ui::ProfileSigninConfirmationDelegate> delegate); private: ProfileSigninConfirmationDialogViews( Browser* browser, const std::string& username, - ui::ProfileSigninConfirmationDelegate* delegate); + std::unique_ptr<ui::ProfileSigninConfirmationDelegate> delegate); ~ProfileSigninConfirmationDialogViews() override; // views::DialogDelegateView: @@ -69,7 +72,7 @@ std::string username_; // Dialog button handler. - ui::ProfileSigninConfirmationDelegate* delegate_; + std::unique_ptr<ui::ProfileSigninConfirmationDelegate> delegate_; // Whether the user should be prompted to create a new profile. bool prompt_for_new_profile_;
diff --git a/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views_browsertest.cc b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views_browsertest.cc new file mode 100644 index 0000000..4ee2eb5 --- /dev/null +++ b/chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views_browsertest.cc
@@ -0,0 +1,76 @@ +// 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 "chrome/browser/ui/views/sync/profile_signin_confirmation_dialog_views.h" + +#include "base/command_line.h" +#include "base/strings/utf_string_conversions.h" +#include "chrome/browser/bookmarks/bookmark_model_factory.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/sync/profile_signin_confirmation_helper.h" +#include "chrome/browser/ui/tab_dialogs.h" +#include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/browser/ui/test/test_browser_dialog.h" +#include "components/bookmarks/browser/bookmark_model.h" +#include "ui/base/ui_base_switches.h" + +namespace { + +// Test delegate passed to the confirmation dialog to receive (and currently +// ignore) the result from the dialog. +class TestSigninDialogDelegate : public ui::ProfileSigninConfirmationDelegate { + public: + TestSigninDialogDelegate() {} + virtual ~TestSigninDialogDelegate() {} + + void OnCancelSignin() override {} + void OnContinueSignin() override {} + void OnSigninWithNewProfile() override {} + + private: + DISALLOW_COPY_AND_ASSIGN(TestSigninDialogDelegate); +}; + +} // namespace + +class ProfileSigninConfirmationDialogTest : public DialogBrowserTest { + public: + ProfileSigninConfirmationDialogTest() {} + + // content::BrowserTestBase: + void SetUpCommandLine(base::CommandLine* command_line) override { + command_line->AppendSwitch(switches::kExtendMdToSecondaryUi); + } + + // DialogBrowserTest: + void ShowDialog(const std::string& name) override { + Profile* profile = browser()->profile(); + + // Add a bookmark to ensure CheckShouldPromptForNewProfile() returns true. + bookmarks::BookmarkModel* bookmarks = + BookmarkModelFactory::GetForBrowserContext(profile); + bookmarks->AddURL(bookmarks->bookmark_bar_node(), 0, + base::ASCIIToUTF16("title"), + GURL("http://www.example.com")); + + content::WebContents* web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + TabDialogs::FromWebContents(web_contents) + ->ShowProfileSigninConfirmation( + browser(), profile, "username@example.com", + base::MakeUnique<TestSigninDialogDelegate>()); + } + + private: + DISALLOW_COPY_AND_ASSIGN(ProfileSigninConfirmationDialogTest); +}; + +// Test that calls ShowDialog("default"). Interactive when run via +// browser_tests --gtest_filter=BrowserDialogTest.Invoke --interactive +// --dialog=ProfileSigninConfirmationDialogTest.InvokeDialog_default +IN_PROC_BROWSER_TEST_F(ProfileSigninConfirmationDialogTest, + InvokeDialog_default) { + RunDialog(); +}
diff --git a/chrome/browser/ui/views/tab_dialogs_views.cc b/chrome/browser/ui/views/tab_dialogs_views.cc index 46177c1..fa36944f 100644 --- a/chrome/browser/ui/views/tab_dialogs_views.cc +++ b/chrome/browser/ui/views/tab_dialogs_views.cc
@@ -53,10 +53,10 @@ Browser* browser, Profile* profile, const std::string& username, - ui::ProfileSigninConfirmationDelegate* delegate) { + std::unique_ptr<ui::ProfileSigninConfirmationDelegate> delegate) { #if !defined(OS_CHROMEOS) - ProfileSigninConfirmationDialogViews::ShowDialog( - browser, profile, username, delegate); + ProfileSigninConfirmationDialogViews::ShowDialog(browser, profile, username, + std::move(delegate)); #else NOTREACHED(); #endif
diff --git a/chrome/browser/ui/views/tab_dialogs_views.h b/chrome/browser/ui/views/tab_dialogs_views.h index 83f4e473..c1bc6fc 100644 --- a/chrome/browser/ui/views/tab_dialogs_views.h +++ b/chrome/browser/ui/views/tab_dialogs_views.h
@@ -24,7 +24,7 @@ Browser* browser, Profile* profile, const std::string& username, - ui::ProfileSigninConfirmationDelegate* delegate) override; + std::unique_ptr<ui::ProfileSigninConfirmationDelegate> delegate) override; void ShowManagePasswordsBubble(bool user_action) override; void HideManagePasswordsBubble() override; base::WeakPtr<ValidationMessageBubble> ShowValidationMessage(
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc index e6f28de..fe1e20c 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_ui.cc +++ b/chrome/browser/ui/webui/print_preview/print_preview_ui.cc
@@ -604,8 +604,6 @@ g_testing_delegate->DidRenderPreviewPage(web_ui()->GetWebContents()); web_ui()->CallJavascriptFunctionUnsafe("onDidPreviewPage", number, ui_identifier, request_id); - if (g_testing_delegate && g_testing_delegate->IsAutoCancelEnabled()) - web_ui()->CallJavascriptFunctionUnsafe("autoCancelForTesting"); } void PrintPreviewUI::OnPreviewDataIsAvailable(int expected_pages_count,
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_ui.h b/chrome/browser/ui/webui/print_preview/print_preview_ui.h index fa9d79e..89ff9b7 100644 --- a/chrome/browser/ui/webui/print_preview/print_preview_ui.h +++ b/chrome/browser/ui/webui/print_preview/print_preview_ui.h
@@ -151,7 +151,6 @@ // also instructs the dialog to auto-cancel, which is used for testing only. class TestingDelegate { public: - virtual bool IsAutoCancelEnabled() = 0; virtual void DidGetPreviewPageCount(int page_count) = 0; virtual void DidRenderPreviewPage(content::WebContents* preview_dialog) = 0; };
diff --git a/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc b/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc index 41a5635..8c9f448 100644 --- a/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc +++ b/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc
@@ -16,6 +16,7 @@ #include "base/threading/sequenced_task_runner_handle.h" #include "base/values.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/chromeos/printing/fake_printer_discoverer.h" #include "chrome/browser/chromeos/printing/ppd_provider_factory.h" #include "chrome/browser/chromeos/printing/printer_pref_manager_factory.h" #include "chrome/browser/download/download_prefs.h" @@ -26,7 +27,6 @@ #include "chrome/common/chrome_paths.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/debug_daemon_client.h" -#include "chromeos/printing/fake_printer_discoverer.h" #include "chromeos/printing/ppd_cache.h" #include "chromeos/printing/ppd_provider.h" #include "content/public/browser/browser_context.h"
diff --git a/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.h b/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.h index 56580dbd..0ca00aa4 100644 --- a/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.h +++ b/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.h
@@ -11,10 +11,10 @@ #include "base/files/file_path.h" #include "base/memory/weak_ptr.h" +#include "chrome/browser/chromeos/printing/printer_discoverer.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" #include "chromeos/printing/ppd_provider.h" #include "chromeos/printing/printer_configuration.h" -#include "chromeos/printing/printer_discoverer.h" #include "ui/shell_dialogs/select_file_dialog.h" namespace base {
diff --git a/chrome/browser/ui/webui/settings/chromeos/device_stylus_handler.cc b/chrome/browser/ui/webui/settings/chromeos/device_stylus_handler.cc index bbd8910..0a7d662 100644 --- a/chrome/browser/ui/webui/settings/chromeos/device_stylus_handler.cc +++ b/chrome/browser/ui/webui/settings/chromeos/device_stylus_handler.cc
@@ -66,7 +66,7 @@ waiting_for_android = true; } else { std::vector<NoteTakingAppInfo> available_apps = - NoteTakingHelper::Get()->GetAvailableApps(Profile::FromWebUI(web_ui())); + helper->GetAvailableApps(Profile::FromWebUI(web_ui())); for (const NoteTakingAppInfo& info : available_apps) { auto dict = base::MakeUnique<base::DictionaryValue>(); dict->SetString(kAppNameKey, info.name); @@ -78,13 +78,13 @@ } } + AllowJavascript(); CallJavascriptFunction( "cr.webUIListenerCallback", base::StringValue("onNoteTakingAppsUpdated"), apps_list, base::FundamentalValue(waiting_for_android)); } void StylusHandler::RequestApps(const base::ListValue* unused_args) { - AllowJavascript(); UpdateNoteTakingApps(); } @@ -104,13 +104,13 @@ } void StylusHandler::HandleInitialize(const base::ListValue* args) { - AllowJavascript(); if (ui::InputDeviceManager::GetInstance()->AreDeviceListsComplete()) SendHasStylus(); } void StylusHandler::SendHasStylus() { DCHECK(ui::InputDeviceManager::GetInstance()->AreDeviceListsComplete()); + AllowJavascript(); CallJavascriptFunction( "cr.webUIListenerCallback", base::StringValue("has-stylus-changed"), base::FundamentalValue(ash::palette_utils::HasStylusInput()));
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc index 59a58613..73bc421 100644 --- a/chrome/common/chrome_switches.cc +++ b/chrome/common/chrome_switches.cc
@@ -1099,6 +1099,11 @@ const char kWindows8Search[] = "windows8-search"; #endif // defined(OS_WIN) +#if BUILDFLAG(ENABLE_PACKAGE_MASH_SERVICES) +// Used to enable Mus+ash. +const char kMash[] = "mash"; +#endif + #if BUILDFLAG(ENABLE_PRINT_PREVIEW) && !defined(OFFICIAL_BUILD) // Enables support to debug printing subsystem. const char kDebugPrint[] = "debug-print";
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h index 9ae5a80..df69b26 100644 --- a/chrome/common/chrome_switches.h +++ b/chrome/common/chrome_switches.h
@@ -9,6 +9,7 @@ #define CHROME_COMMON_CHROME_SWITCHES_H_ #include "build/build_config.h" +#include "chrome/common/features.h" #include "ppapi/features/features.h" #include "printing/features/features.h" @@ -329,6 +330,10 @@ extern const char kWindows8Search[]; #endif // defined(OS_WIN) +#if BUILDFLAG(ENABLE_PACKAGE_MASH_SERVICES) +extern const char kMash[]; +#endif + #if BUILDFLAG(ENABLE_PRINT_PREVIEW) && !defined(OFFICIAL_BUILD) extern const char kDebugPrint[]; #endif
diff --git a/chrome/service/service_utility_process_host.cc b/chrome/service/service_utility_process_host.cc index 8932a87..69b8a8d 100644 --- a/chrome/service/service_utility_process_host.cc +++ b/chrome/service/service_utility_process_host.cc
@@ -169,7 +169,6 @@ : client_(client), client_task_runner_(client_task_runner), waiting_for_reply_(false), - mojo_child_token_(mojo::edk::GenerateRandomToken()), weak_ptr_factory_(this) { child_process_host_.reset(ChildProcessHost::Create(this)); } @@ -221,7 +220,7 @@ bool ServiceUtilityProcessHost::StartProcess(bool no_sandbox) { std::string mojo_channel_token = - child_process_host_->CreateChannelMojo(mojo_child_token_); + child_process_host_->CreateChannelMojo(&process_connection_); if (mojo_channel_token.empty()) return false; @@ -278,13 +277,9 @@ } } - if (success) { - mojo::edk::ChildProcessLaunched(process_.Handle(), - std::move(parent_handle), - mojo_child_token_); - } else { - mojo::edk::ChildProcessLaunchFailed(mojo_child_token_); - } + if (success) + process_connection_.Connect(process_.Handle(), std::move(parent_handle)); + return success; }
diff --git a/chrome/service/service_utility_process_host.h b/chrome/service/service_utility_process_host.h index d0dea94..7fc9ab88 100644 --- a/chrome/service/service_utility_process_host.h +++ b/chrome/service/service_utility_process_host.h
@@ -13,6 +13,7 @@ #include "base/memory/weak_ptr.h" #include "content/public/common/child_process_host_delegate.h" #include "ipc/ipc_platform_file.h" +#include "mojo/edk/embedder/pending_process_connection.h" namespace base { class CommandLine; @@ -147,7 +148,7 @@ scoped_refptr<Client> client_; scoped_refptr<base::SingleThreadTaskRunner> client_task_runner_; bool waiting_for_reply_; - const std::string mojo_child_token_; + mojo::edk::PendingProcessConnection process_connection_; // Start time of operation. base::Time start_time_;
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 9af0c32e..928676f 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -2156,6 +2156,7 @@ "../browser/ui/views/frame/browser_non_client_frame_view_browsertest_win.cc", "../browser/ui/views/frame/browser_window_property_manager_browsertest_win.cc", "../browser/ui/views/select_file_dialog_extension_browsertest.cc", + "../browser/ui/views/sync/profile_signin_confirmation_dialog_views_browsertest.cc", ] deps += [ "//ui/views" ] if (!is_chromeos && (!is_mac || mac_views_browser)) { @@ -2379,6 +2380,7 @@ "../browser/ui/views/external_protocol_dialog_browsertest.cc", # inline login UI is disabled on chromeos + "../browser/ui/views/sync/profile_signin_confirmation_dialog_views_browsertest.cc", "../browser/ui/webui/signin/inline_login_ui_browsertest.cc", # chromeos does not use the desktop user manager
diff --git a/chrome/test/base/mojo_test_connector.cc b/chrome/test/base/mojo_test_connector.cc index 2c7e92a..f1bcee2 100644 --- a/chrome/test/base/mojo_test_connector.cc +++ b/chrome/test/base/mojo_test_connector.cc
@@ -17,6 +17,7 @@ #include "content/public/common/content_switches.h" #include "content/public/test/test_launcher.h" #include "mojo/edk/embedder/embedder.h" +#include "mojo/edk/embedder/pending_process_connection.h" #include "mojo/edk/embedder/platform_channel_pair.h" #include "mojo/edk/embedder/scoped_ipc_support.h" #include "mojo/public/cpp/bindings/interface_request.h" @@ -42,8 +43,7 @@ public: explicit MojoTestState( service_manager::BackgroundServiceManager* background_service_manager) - : child_token_(mojo::edk::GenerateRandomToken()), - background_service_manager_(background_service_manager), + : background_service_manager_(background_service_manager), weak_factory_(this) {} ~MojoTestState() override {} @@ -68,8 +68,8 @@ #error "Unsupported" #endif service_manager::mojom::ServicePtr service = - service_manager::PassServiceRequestOnCommandLine(command_line, - child_token_); + service_manager::PassServiceRequestOnCommandLine(&process_connection_, + command_line); background_service_manager_->RegisterService( service_manager::Identity( @@ -87,8 +87,7 @@ void ChildProcessLaunched(base::ProcessHandle handle, base::ProcessId pid) override { platform_channel_->ChildProcessLaunched(); - mojo::edk::ChildProcessLaunched( - handle, platform_channel_->PassServerHandle(), child_token_); + process_connection_.Connect(handle, platform_channel_->PassServerHandle()); main_task_runner_->PostTask( FROM_HERE, @@ -102,7 +101,7 @@ pid_receiver_.reset(); } - const std::string child_token_; + mojo::edk::PendingProcessConnection process_connection_; service_manager::BackgroundServiceManager* const background_service_manager_; // NOTE: HandlePassingInformation must remain valid through process launch,
diff --git a/chrome/test/chromedriver/chrome/version.cc b/chrome/test/chromedriver/chrome/version.cc index a401b67..92f52ad 100644 --- a/chrome/test/chromedriver/chrome/version.cc +++ b/chrome/test/chromedriver/chrome/version.cc
@@ -9,7 +9,7 @@ namespace { // This variable must be able to be found and parsed by the upload script. -const int kMinimumSupportedChromeVersion[] = {54, 0, 2840, 0}; +const int kMinimumSupportedChromeVersion[] = {55, 0, 2883, 0}; } // namespace
diff --git a/chrome/test/chromedriver/test/run_all_tests.py b/chrome/test/chromedriver/test/run_all_tests.py index 3d4d877..b5b421437 100755 --- a/chrome/test/chromedriver/test/run_all_tests.py +++ b/chrome/test/chromedriver/test/run_all_tests.py
@@ -193,15 +193,15 @@ # Linux32 builds need to be special-cased, because 1) they are keyed by # git hash rather than commit position, and 2) come from a different # download site (so we can't just convert the commit position to a hash). + versions['57'] = '7da9cd89d4d18e171323ff7d0d2a93ede0c1d721' versions['56'] = '67002b0fdaa3123f10f96fa2f7965677d531db74' versions['55'] = 'e9bc4e0245c9a1e570ed2cf8e12152b9122275f2' - versions['54'] = '13d140acdaa710770f42790044825b49f99e466c' # TODO(samuong): speculative fix for crbug.com/611886 os.environ['CHROME_DEVEL_SANDBOX'] = '/opt/chromium/chrome_sandbox' else: + versions['57'] = '444890' versions['56'] = '433020' versions['55'] = '423791' - versions['54'] = '414545' code = 0 for version, revision in versions.iteritems(): if options.chrome_version and version != options.chrome_version:
diff --git a/chrome/test/chromedriver/test/test_expectations b/chrome/test/chromedriver/test/test_expectations index b321fde..063ffbb 100644 --- a/chrome/test/chromedriver/test/test_expectations +++ b/chrome/test/chromedriver/test/test_expectations
@@ -240,6 +240,13 @@ 'CorrectEventFiringTest.testShouldFireMouseDownEventWhenClicking', # https://bugs.chromium.org/p/chromedriver/issues/detail?id=998 'ImplicitWaitTest.testShouldImplicitlyWaitForASingleElement', + # https://bugs.chromium.org/p/chromedriver/issues/detail?id=922 + 'ClickTest.testCanClickOnAnElementWithTopSetToANegativeNumber', + 'CorrectEventFiringTest.testClickEventsShouldBubble', + 'VisibilityTest.testShouldModifyTheVisibilityOfAnElementDynamically', + 'CorrectEventFiringTest.testSendingKeysToAFocusedElementShouldNotBlurThatElement', + 'JavascriptEnabledDriverTest.testShouldBeAbleToClickOnSubmitButtons', + 'JavascriptEnabledDriverTest.testIssue80ClickShouldGenerateClickEvent', ] ) _OS_NEGATIVE_FILTER['android:chrome_beta'] = (
diff --git a/chrome/test/data/webui/settings/people_page_sync_page_test.js b/chrome/test/data/webui/settings/people_page_sync_page_test.js index b8cd5c4..ff1d784 100644 --- a/chrome/test/data/webui/settings/people_page_sync_page_test.js +++ b/chrome/test/data/webui/settings/people_page_sync_page_test.js
@@ -274,6 +274,9 @@ // on a background tab (which has throttled timers) and will timeout. link.target = ''; link.href = '#'; + // Prevent the link from triggering a page navigation when tapped. + // Breaks the test in Vulcanized mode. + link.addEventListener('tap', function(e) { e.preventDefault(); }); MockInteractions.tap(link);
diff --git a/chrome/utility/importer/firefox_importer_unittest_utils_mac.cc b/chrome/utility/importer/firefox_importer_unittest_utils_mac.cc index 777a461..e94d671 100644 --- a/chrome/utility/importer/firefox_importer_unittest_utils_mac.cc +++ b/chrome/utility/importer/firefox_importer_unittest_utils_mac.cc
@@ -28,6 +28,7 @@ #include "ipc/ipc_listener.h" #include "ipc/ipc_message.h" #include "mojo/edk/embedder/embedder.h" +#include "mojo/edk/embedder/pending_process_connection.h" #include "mojo/edk/embedder/platform_channel_pair.h" #include "mojo/edk/embedder/scoped_platform_handle.h" #include "testing/multiprocess_func_list.h" @@ -146,27 +147,19 @@ listener_.reset(new FFDecryptorServerChannelListener()); // Set up IPC channel using ChannelMojo. - const std::string mojo_child_token = mojo::edk::GenerateRandomToken(); - const std::string mojo_channel_token = mojo::edk::GenerateRandomToken(); - mojo::ScopedMessagePipeHandle parent_handle = - mojo::edk::CreateParentMessagePipe(mojo_channel_token, mojo_child_token); - channel_ = IPC::Channel::CreateServer(parent_handle.release(), - listener_.get()); + mojo::edk::PendingProcessConnection process; + std::string token; + mojo::ScopedMessagePipeHandle parent_pipe = process.CreateMessagePipe(&token); + channel_ = IPC::Channel::CreateServer(parent_pipe.release(), listener_.get()); CHECK(channel_->Connect()); listener_->SetSender(channel_.get()); // Spawn child and set up sync IPC connection. mojo::edk::PlatformChannelPair channel_pair; child_process_ = LaunchNSSDecrypterChildProcess( - nss_path, channel_pair.PassClientHandle(), mojo_channel_token); - if (child_process_.IsValid()) { - mojo::edk::ChildProcessLaunched(child_process_.Handle(), - channel_pair.PassServerHandle(), - mojo_child_token); - } else { - mojo::edk::ChildProcessLaunchFailed(mojo_child_token); - } - + nss_path, channel_pair.PassClientHandle(), token); + if (child_process_.IsValid()) + process.Connect(child_process_.Handle(), channel_pair.PassServerHandle()); return child_process_.IsValid(); }
diff --git a/chromeos/chromeos.gyp b/chromeos/chromeos.gyp index 8e98eb2a5..291f667 100644 --- a/chromeos/chromeos.gyp +++ b/chromeos/chromeos.gyp
@@ -365,15 +365,12 @@ 'network/shill_property_handler.h', 'network/shill_property_util.cc', 'network/shill_property_util.h', - 'printing/fake_printer_discoverer.cc', - 'printing/fake_printer_discoverer.h', 'printing/ppd_cache.cc', 'printing/ppd_cache.h', 'printing/ppd_provider.cc', 'printing/ppd_provider.h', 'printing/printer_configuration.cc', 'printing/printer_configuration.h', - 'printing/printer_discoverer.h', 'printing/printer_translator.cc', 'printing/printer_translator.h', 'process_proxy/process_output_watcher.cc',
diff --git a/components/arc/arc_session.cc b/components/arc/arc_session.cc index 92940393..c063a645 100644 --- a/components/arc/arc_session.cc +++ b/components/arc/arc_session.cc
@@ -33,6 +33,7 @@ #include "mojo/edk/embedder/embedder.h" #include "mojo/edk/embedder/named_platform_handle.h" #include "mojo/edk/embedder/named_platform_handle_utils.h" +#include "mojo/edk/embedder/pending_process_connection.h" #include "mojo/edk/embedder/platform_channel_pair.h" #include "mojo/edk/embedder/platform_channel_utils_posix.h" #include "mojo/edk/embedder/platform_handle_vector.h" @@ -441,15 +442,16 @@ // Hardcode pid 0 since it is unused in mojo. const base::ProcessHandle kUnusedChildProcessHandle = 0; mojo::edk::PlatformChannelPair channel_pair; - std::string child_token = mojo::edk::GenerateRandomToken(); - mojo::edk::ChildProcessLaunched(kUnusedChildProcessHandle, - channel_pair.PassServerHandle(), child_token); + mojo::edk::PendingProcessConnection process; + process.Connect(kUnusedChildProcessHandle, channel_pair.PassServerHandle()); mojo::edk::ScopedPlatformHandleVectorPtr handles( new mojo::edk::PlatformHandleVector{ channel_pair.PassClientHandle().release()}); - std::string token = mojo::edk::GenerateRandomToken(); + std::string token; + mojo::ScopedMessagePipeHandle pipe = process.CreateMessagePipe(&token); + // We need to send the length of the message as a single byte, so make sure it // fits. DCHECK_LT(token.size(), 256u); @@ -464,7 +466,7 @@ return mojo::ScopedMessagePipeHandle(); } - return mojo::edk::CreateParentMessagePipe(token, child_token); + return pipe; } void ArcSessionImpl::OnMojoConnected(
diff --git a/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc b/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc index 63f6080..52f7982 100644 --- a/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc +++ b/components/data_reduction_proxy/core/common/data_reduction_proxy_params.cc
@@ -142,8 +142,7 @@ bool FetchWarmupURLEnabled() { // Fetching of the warmup URL can be enabled only for Enabled* and Control* // groups. - if (!base::StartsWith(FieldTrialList::FindFullName(kQuicFieldTrial), kEnabled, - base::CompareCase::SENSITIVE) && + if (!IsIncludedInQuicFieldTrial() && !base::StartsWith(FieldTrialList::FindFullName(kQuicFieldTrial), kControl, base::CompareCase::SENSITIVE)) { return false; @@ -215,7 +214,16 @@ } bool IsIncludedInQuicFieldTrial() { - return IsIncludedInFieldTrial(kQuicFieldTrial); + if (base::StartsWith(FieldTrialList::FindFullName(kQuicFieldTrial), kControl, + base::CompareCase::SENSITIVE)) { + return false; + } + if (base::StartsWith(FieldTrialList::FindFullName(kQuicFieldTrial), kDisabled, + base::CompareCase::SENSITIVE)) { + return false; + } + // QUIC is enabled by default. + return true; } const char* GetQuicFieldTrialName() {
diff --git a/components/data_reduction_proxy/core/common/data_reduction_proxy_params_unittest.cc b/components/data_reduction_proxy/core/common/data_reduction_proxy_params_unittest.cc index 0d10608..20de811 100644 --- a/components/data_reduction_proxy/core/common/data_reduction_proxy_params_unittest.cc +++ b/components/data_reduction_proxy/core/common/data_reduction_proxy_params_unittest.cc
@@ -422,8 +422,9 @@ std::string()}, {"Control", false, "true", false, true, true, std::string()}, {"Disabled", false, "false", false, true, false, std::string()}, - {"enabled", false, "false", false, true, false, std::string()}, + {"enabled", true, "false", false, true, true, std::string()}, {"Enabled", true, "true", true, true, true, "example.com/test.html"}, + {std::string(), true, "true", false, false, false, std::string()}, }; for (const auto& test : tests) {
diff --git a/components/metrics/metrics_service_client.cc b/components/metrics/metrics_service_client.cc index 0d95592..5b64277 100644 --- a/components/metrics/metrics_service_client.cc +++ b/components/metrics/metrics_service_client.cc
@@ -8,6 +8,10 @@ namespace metrics { +MetricsServiceClient::MetricsServiceClient() : update_running_services_() {} + +MetricsServiceClient::~MetricsServiceClient() {} + ukm::UkmService* MetricsServiceClient::GetUkmService() { return nullptr; } @@ -32,4 +36,18 @@ return metrics::kDefaultMetricsServerUrl; } +bool MetricsServiceClient::IsHistorySyncEnabledOnAllProfiles() { + return false; +} + +void MetricsServiceClient::SetUpdateRunningServicesCallback( + const base::Closure& callback) { + update_running_services_ = callback; +} + +void MetricsServiceClient::UpdateRunningServices() { + if (update_running_services_) + update_running_services_.Run(); +} + } // namespace metrics
diff --git a/components/metrics/metrics_service_client.h b/components/metrics/metrics_service_client.h index 858d1d87..2ce2017 100644 --- a/components/metrics/metrics_service_client.h +++ b/components/metrics/metrics_service_client.h
@@ -10,7 +10,7 @@ #include <memory> #include <string> -#include "base/callback_forward.h" +#include "base/callback.h" #include "base/strings/string16.h" #include "base/time/time.h" #include "components/metrics/metrics_reporting_default_state.h" @@ -33,7 +33,8 @@ // environment. class MetricsServiceClient { public: - virtual ~MetricsServiceClient() {} + MetricsServiceClient(); + virtual ~MetricsServiceClient(); // Returns the MetricsService instance that this client is associated with. // With the exception of testing contexts, the returned instance must be valid @@ -120,6 +121,21 @@ // Returns whether cellular logic is enabled for metrics reporting. virtual bool IsUMACellularUploadLogicEnabled(); + + // Returns if history sync is enabled on all active profiles. + virtual bool IsHistorySyncEnabledOnAllProfiles(); + + // Sets the callback to run MetricsServiceManager::UpdateRunningServices. + void SetUpdateRunningServicesCallback(const base::Closure& callback); + + protected: + // Notify MetricsServiceManager to UpdateRunningServices using callback. + void UpdateRunningServices(); + + private: + base::Closure update_running_services_; + + DISALLOW_COPY_AND_ASSIGN(MetricsServiceClient); }; } // namespace metrics
diff --git a/components/metrics_services_manager/metrics_services_manager.cc b/components/metrics_services_manager/metrics_services_manager.cc index e1ec650..7b87f88 100644 --- a/components/metrics_services_manager/metrics_services_manager.cc +++ b/components/metrics_services_manager/metrics_services_manager.cc
@@ -68,27 +68,40 @@ metrics::MetricsServiceClient* MetricsServicesManager::GetMetricsServiceClient() { DCHECK(thread_checker_.CalledOnValidThread()); - if (!metrics_service_client_) + if (!metrics_service_client_) { metrics_service_client_ = client_->CreateMetricsServiceClient(); + // base::Unretained is safe since |this| owns the metrics_service_client_. + metrics_service_client_->SetUpdateRunningServicesCallback( + base::Bind(&MetricsServicesManager::UpdateRunningServices, + base::Unretained(this))); + } return metrics_service_client_.get(); } -void MetricsServicesManager::UpdatePermissions(bool may_record, - bool may_upload) { +void MetricsServicesManager::UpdatePermissions(bool current_may_record, + bool current_may_upload) { DCHECK(thread_checker_.CalledOnValidThread()); + // If the user has opted out of metrics, delete local UKM state. + if (may_record_ && !current_may_record) { + ukm::UkmService* ukm = GetUkmService(); + if (ukm) { + ukm->Purge(); + ukm->ResetClientId(); + } + } + // Stash the current permissions so that we can update the RapporServiceImpl // correctly when the Rappor preference changes. The metrics recording // preference partially determines the initial rappor setting, and also // controls whether FINE metrics are sent. - may_record_ = may_record; - may_upload_ = may_upload; + may_record_ = current_may_record; + may_upload_ = current_may_upload; UpdateRunningServices(); } void MetricsServicesManager::UpdateRunningServices() { DCHECK(thread_checker_.CalledOnValidThread()); metrics::MetricsService* metrics = GetMetricsService(); - ukm::UkmService* ukm = GetUkmService(); if (client_->OnlyDoMetricsRecording()) { metrics->StartRecordingForTests(); @@ -102,23 +115,16 @@ if (may_record_) { if (!metrics->recording_active()) metrics->Start(); - - if (may_upload_) { + if (may_upload_) metrics->EnableReporting(); -#if !defined(OFFICIAL_BUILD) - // TODO(holte): Make UKM check sync state instead of official build. - if (ukm) - ukm->EnableReporting(); -#endif - } else { + else metrics->DisableReporting(); - if (ukm) - ukm->DisableReporting(); - } } else { metrics->Stop(); } + UpdateUkmService(); + int recording_groups = 0; #if defined(GOOGLE_CHROME_BUILD) if (may_record_) @@ -137,6 +143,24 @@ GetRapporServiceImpl()->Update(recording_groups, may_upload_); } +void MetricsServicesManager::UpdateUkmService() { + ukm::UkmService* ukm = GetUkmService(); + if (!ukm) + return; + bool sync_enabled = + metrics_service_client_->IsHistorySyncEnabledOnAllProfiles(); + if (may_record_ && sync_enabled) { + ukm->EnableRecording(); + if (may_upload_) + ukm->EnableReporting(); + else + ukm->DisableReporting(); + } else { + ukm->DisableRecording(); + ukm->DisableReporting(); + } +} + void MetricsServicesManager::UpdateUploadPermissions(bool may_upload) { UpdatePermissions(client_->IsMetricsReportingEnabled(), may_upload); }
diff --git a/components/metrics_services_manager/metrics_services_manager.h b/components/metrics_services_manager/metrics_services_manager.h index 4bfe18d7..6880845 100644 --- a/components/metrics_services_manager/metrics_services_manager.h +++ b/components/metrics_services_manager/metrics_services_manager.h
@@ -79,7 +79,7 @@ // Update the managed services when permissions for recording/uploading // metrics change. - void UpdatePermissions(bool may_record, bool may_upload); + void UpdatePermissions(bool current_may_record, bool current_may_upload); // Update the managed services when permissions for uploading metrics change. void UpdateUploadPermissions(bool may_upload); @@ -98,6 +98,9 @@ // Update which services are running to match current permissions. void UpdateRunningServices(); + // Update the state of UkmService to match current permissions. + void UpdateUkmService(); + // The client passed in from the embedder. std::unique_ptr<MetricsServicesManagerClient> client_;
diff --git a/components/nacl/broker/nacl_broker_listener.cc b/components/nacl/broker/nacl_broker_listener.cc index 6161d66..734e5e5 100644 --- a/components/nacl/broker/nacl_broker_listener.cc +++ b/components/nacl/broker/nacl_broker_listener.cc
@@ -26,6 +26,7 @@ #include "content/public/common/sandbox_init.h" #include "ipc/ipc_channel.h" #include "mojo/edk/embedder/embedder.h" +#include "mojo/edk/embedder/pending_process_connection.h" #include "mojo/edk/embedder/platform_channel_pair.h" #include "mojo/public/cpp/system/message_pipe.h" #include "sandbox/win/src/sandbox_policy.h" @@ -133,13 +134,12 @@ cmd_line->AppendSwitchASCII( mojo::edk::PlatformChannelPair::kMojoPlatformChannelHandleSwitch, base::UintToString(base::win::HandleToUint32(handles[0]))); - const std::string mojo_child_token = mojo::edk::GenerateRandomToken(); - const std::string mojo_channel_token = mojo::edk::GenerateRandomToken(); + + mojo::edk::PendingProcessConnection pending_process; + std::string token; mojo::ScopedMessagePipeHandle host_message_pipe = - mojo::edk::CreateParentMessagePipe(mojo_channel_token, - mojo_child_token); - cmd_line->AppendSwitchASCII(switches::kServiceRequestChannelToken, - mojo_channel_token); + pending_process.CreateMessagePipe(&token); + cmd_line->AppendSwitchASCII(switches::kServiceRequestChannelToken, token); CHECK_EQ(MOJO_RESULT_OK, mojo::FuseMessagePipes(std::move(loader_message_pipe), std::move(host_message_pipe))); @@ -149,9 +149,9 @@ this, cmd_line, handles, &loader_process); if (result == sandbox::SBOX_ALL_OK) { - mojo::edk::ChildProcessLaunched(loader_process.Handle(), - std::move(parent_handle), - mojo_child_token); + pending_process.Connect(loader_process.Handle(), + std::move(parent_handle)); + // Note: PROCESS_DUP_HANDLE is necessary here, because: // 1) The current process is the broker, which is the loader's parent. // 2) The browser is not the loader's parent, and so only gets the @@ -165,8 +165,6 @@ browser_process_.Handle(), &loader_handle_in_browser, PROCESS_DUP_HANDLE | PROCESS_QUERY_INFORMATION | PROCESS_TERMINATE, FALSE, 0); - } else { - mojo::edk::ChildProcessLaunchFailed(mojo_child_token); } }
diff --git a/components/sessions/core/tab_restore_service_helper.cc b/components/sessions/core/tab_restore_service_helper.cc index bbb41f5e..c140cda 100644 --- a/components/sessions/core/tab_restore_service_helper.cc +++ b/components/sessions/core/tab_restore_service_helper.cc
@@ -348,6 +348,11 @@ base::trace_event::MemoryDumpManager::GetInstance() ->system_allocator_pool_name(); + if (entries_.empty()) { + // Nothing to report + return true; + } + std::string entries_dump_name = base::StringPrintf( "tab_restore/service_helper_0x%" PRIXPTR "/entries", reinterpret_cast<uintptr_t>(this));
diff --git a/components/translate/ios/browser/js_translate_manager_unittest.mm b/components/translate/ios/browser/js_translate_manager_unittest.mm index 838a9f9..21e9a9d 100644 --- a/components/translate/ios/browser/js_translate_manager_unittest.mm +++ b/components/translate/ios/browser/js_translate_manager_unittest.mm
@@ -47,7 +47,8 @@ base::scoped_nsobject<JsTranslateManager> manager_; }; -TEST_F(JsTranslateManagerTest, PerformancePlaceholder) { +// TODO(crbug.com/658619#c47): Test reported as flaky. +TEST_F(JsTranslateManagerTest, DISABLED_PerformancePlaceholder) { [manager_ inject]; EXPECT_TRUE(IsDefined(@"performance")); EXPECT_TRUE(IsDefined(@"performance.now"));
diff --git a/components/ukm/BUILD.gn b/components/ukm/BUILD.gn index 4cd8a195..398d893e 100644 --- a/components/ukm/BUILD.gn +++ b/components/ukm/BUILD.gn
@@ -36,11 +36,14 @@ sources = [ "observers/history_delete_observer.cc", "observers/history_delete_observer.h", + "observers/sync_disable_observer.cc", + "observers/sync_disable_observer.h", ] deps = [ "//base", "//components/history/core/browser", + "//components/sync", ] } @@ -64,10 +67,12 @@ source_set("unit_tests") { testonly = true sources = [ + "observers/sync_disable_observer_unittest.cc", "ukm_service_unittest.cc", ] deps = [ + ":observers", ":test_support", ":ukm", "//base", @@ -75,6 +80,7 @@ "//components/metrics", "//components/metrics:test_support", "//components/prefs:test_support", + "//components/sync:test_support_driver", "//net:test_support", "//testing/gtest", "//third_party/zlib:compression_utils",
diff --git a/components/ukm/observers/DEPS b/components/ukm/observers/DEPS index b1c70a4..a8ed862 100644 --- a/components/ukm/observers/DEPS +++ b/components/ukm/observers/DEPS
@@ -1,3 +1,4 @@ include_rules = [ "+components/history/core/browser", + "+components/sync", ]
diff --git a/components/ukm/observers/sync_disable_observer.cc b/components/ukm/observers/sync_disable_observer.cc new file mode 100644 index 0000000..23ae995 --- /dev/null +++ b/components/ukm/observers/sync_disable_observer.cc
@@ -0,0 +1,81 @@ +// 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 "components/ukm/observers/sync_disable_observer.h" + +#include "base/stl_util.h" + +namespace ukm { + +SyncDisableObserver::SyncDisableObserver() + : sync_observer_(this), all_profiles_enabled_(false) {} + +SyncDisableObserver::~SyncDisableObserver() {} + +// static +SyncDisableObserver::SyncState SyncDisableObserver::GetSyncState( + syncer::SyncService* sync_service) { + return SyncDisableObserver::SyncState{ + sync_service->GetPreferredDataTypes().Has( + syncer::HISTORY_DELETE_DIRECTIVES), + sync_service->IsEngineInitialized(), + sync_service->IsUsingSecondaryPassphrase(), + }; +} + +void SyncDisableObserver::ObserveServiceForSyncDisables( + syncer::SyncService* sync_service) { + previous_states_[sync_service] = GetSyncState(sync_service); + sync_observer_.Add(sync_service); + UpdateAllProfileEnabled(false); +} + +void SyncDisableObserver::UpdateAllProfileEnabled(bool must_purge) { + bool all_enabled = AreAllProfilesEnabled(); + if (must_purge || (all_enabled != all_profiles_enabled_)) { + all_profiles_enabled_ = all_enabled; + OnSyncPrefsChanged(must_purge); + } +} + +bool SyncDisableObserver::AreAllProfilesEnabled() { + if (previous_states_.empty()) + return false; + for (const auto& kv : previous_states_) { + const SyncDisableObserver::SyncState& state = kv.second; + if (!state.history_enabled || !state.initialized || + state.passphrase_protected) + return false; + } + return true; +} + +void SyncDisableObserver::OnStateChanged(syncer::SyncService* sync) { + DCHECK(base::ContainsKey(previous_states_, sync)); + SyncDisableObserver::SyncState state = GetSyncState(sync); + const SyncDisableObserver::SyncState& previous_state = previous_states_[sync]; + bool must_purge = + // Trigger a purge if history sync was disabled. + (previous_state.history_enabled && !state.history_enabled) || + // Trigger a purge if the user added a passphrase. Since we can't detect + // the use of a passphrase while the engine is not initialized, we may + // miss the transition if the user adds a passphrase in this state. + (previous_state.initialized && state.initialized && + !previous_state.passphrase_protected && state.passphrase_protected); + previous_states_[sync] = state; + UpdateAllProfileEnabled(must_purge); +} + +void SyncDisableObserver::OnSyncShutdown(syncer::SyncService* sync) { + DCHECK(base::ContainsKey(previous_states_, sync)); + sync_observer_.Remove(sync); + previous_states_.erase(sync); + UpdateAllProfileEnabled(false); +} + +bool SyncDisableObserver::IsHistorySyncEnabledOnAllProfiles() { + return all_profiles_enabled_; +} + +} // namespace ukm
diff --git a/components/ukm/observers/sync_disable_observer.h b/components/ukm/observers/sync_disable_observer.h new file mode 100644 index 0000000..931e5ba --- /dev/null +++ b/components/ukm/observers/sync_disable_observer.h
@@ -0,0 +1,78 @@ +// 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. + +#ifndef COMPONENTS_UKM_OBSERVERS_SYNC_DISABLE_OBSERVER_H_ +#define COMPONENTS_UKM_OBSERVERS_SYNC_DISABLE_OBSERVER_H_ + +#include <map> + +#include "base/scoped_observer.h" +#include "components/sync/driver/sync_service.h" +#include "components/sync/driver/sync_service_observer.h" + +namespace ukm { + +// Observes the state of a set of SyncServices for changes to history sync +// preferences. This is for used to trigger purging of local state when +// sync is disabled on a profile and disabling recording when any non-syncing +// profiles are active. +class SyncDisableObserver : public syncer::SyncServiceObserver { + public: + SyncDisableObserver(); + ~SyncDisableObserver() override; + + // Starts observing a service for sync disables. + void ObserveServiceForSyncDisables(syncer::SyncService* sync_service); + + // Returns if history sync is enabled on all active profiles. + virtual bool IsHistorySyncEnabledOnAllProfiles(); + + protected: + // Called after state changes and some profile has sync disabled. + // If |must_purge| is true, sync was disabled for some profile, and + // local data should be purged. + virtual void OnSyncPrefsChanged(bool must_purge) = 0; + + private: + // syncer::SyncServiceObserver: + void OnStateChanged(syncer::SyncService* sync) override; + void OnSyncShutdown(syncer::SyncService* sync) override; + + // Recomputes all_profiles_enabled_ state from previous_states_; + void UpdateAllProfileEnabled(bool must_purge); + + // Returns true iff all profiles are enabled in previous_states_. + // If there are no profiles being observed, this returns false. + bool AreAllProfilesEnabled(); + + // Tracks observed history services, for cleanup. + ScopedObserver<syncer::SyncService, syncer::SyncServiceObserver> + sync_observer_; + + // State data about sync services that we need to remember. + struct SyncState { + // If the user has history sync enabled. + bool history_enabled; + // Whether the sync service has been initialized. + bool initialized; + // Whether user data is hidden by a secondary passphrase. + // This is not valid if the state is not initialized. + bool passphrase_protected; + }; + + // Gets the current state of a SyncService. + static SyncState GetSyncState(syncer::SyncService* sync); + + // The list of services that had sync enabled when we last checked. + std::map<syncer::SyncService*, SyncState> previous_states_; + + // Tracks if sync was enabled on all profiles after the last state change. + bool all_profiles_enabled_; + + DISALLOW_COPY_AND_ASSIGN(SyncDisableObserver); +}; + +} // namespace ukm + +#endif // COMPONENTS_UKM_OBSERVERS_SYNC_DISABLE_OBSERVER_H_
diff --git a/components/ukm/observers/sync_disable_observer_unittest.cc b/components/ukm/observers/sync_disable_observer_unittest.cc new file mode 100644 index 0000000..4e4080e --- /dev/null +++ b/components/ukm/observers/sync_disable_observer_unittest.cc
@@ -0,0 +1,216 @@ +// 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 "components/ukm/observers/sync_disable_observer.h" + +#include "base/observer_list.h" +#include "components/sync/driver/fake_sync_service.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace ukm { + +namespace { + +class MockSyncService : public syncer::FakeSyncService { + public: + MockSyncService() {} + ~MockSyncService() override { Shutdown(); } + + void SetStatus(bool has_passphrase, bool enabled) { + initialized_ = true; + has_passphrase_ = has_passphrase; + preferred_data_types_ = + enabled ? syncer::ModelTypeSet(syncer::HISTORY_DELETE_DIRECTIVES) + : syncer::ModelTypeSet(); + for (auto& observer : observers_) { + observer.OnStateChanged(this); + } + } + + void Shutdown() { + for (auto& observer : observers_) { + observer.OnSyncShutdown(this); + } + } + + private: + // syncer::FakeSyncService: + void AddObserver(syncer::SyncServiceObserver* observer) override { + observers_.AddObserver(observer); + } + void RemoveObserver(syncer::SyncServiceObserver* observer) override { + observers_.RemoveObserver(observer); + } + bool IsEngineInitialized() const override { return initialized_; } + bool IsUsingSecondaryPassphrase() const override { return has_passphrase_; } + syncer::ModelTypeSet GetPreferredDataTypes() const override { + return preferred_data_types_; + } + + bool initialized_ = false; + bool has_passphrase_ = false; + syncer::ModelTypeSet preferred_data_types_; + + // The list of observers of the SyncService state. + base::ObserverList<syncer::SyncServiceObserver> observers_; + + DISALLOW_COPY_AND_ASSIGN(MockSyncService); +}; + +class TestSyncDisableObserver : public SyncDisableObserver { + public: + TestSyncDisableObserver() : purged_(false), notified_(false) {} + ~TestSyncDisableObserver() override {} + + bool ResetPurged() { + bool was_purged = purged_; + purged_ = false; + return was_purged; + } + + bool ResetNotified() { + bool notified = notified_; + notified_ = false; + return notified; + } + + private: + // SyncDisableObserver: + void OnSyncPrefsChanged(bool must_purge) override { + notified_ = true; + purged_ = purged_ || must_purge; + } + bool purged_; + bool notified_; + DISALLOW_COPY_AND_ASSIGN(TestSyncDisableObserver); +}; + +class SyncDisableObserverTest : public testing::Test { + public: + SyncDisableObserverTest() {} + + private: + DISALLOW_COPY_AND_ASSIGN(SyncDisableObserverTest); +}; + +} // namespace + +TEST_F(SyncDisableObserverTest, NoProfiles) { + TestSyncDisableObserver observer; + EXPECT_FALSE(observer.IsHistorySyncEnabledOnAllProfiles()); + EXPECT_FALSE(observer.ResetNotified()); + EXPECT_FALSE(observer.ResetPurged()); +} + +TEST_F(SyncDisableObserverTest, OneEnabled) { + TestSyncDisableObserver observer; + MockSyncService sync; + sync.SetStatus(false, true); + observer.ObserveServiceForSyncDisables(&sync); + EXPECT_TRUE(observer.IsHistorySyncEnabledOnAllProfiles()); + EXPECT_TRUE(observer.ResetNotified()); + EXPECT_FALSE(observer.ResetPurged()); +} + +TEST_F(SyncDisableObserverTest, Passphrase) { + TestSyncDisableObserver observer; + MockSyncService sync; + sync.SetStatus(true, true); + observer.ObserveServiceForSyncDisables(&sync); + EXPECT_FALSE(observer.IsHistorySyncEnabledOnAllProfiles()); + EXPECT_FALSE(observer.ResetNotified()); + EXPECT_FALSE(observer.ResetPurged()); +} + +TEST_F(SyncDisableObserverTest, HistoryDisabled) { + TestSyncDisableObserver observer; + MockSyncService sync; + sync.SetStatus(false, false); + observer.ObserveServiceForSyncDisables(&sync); + EXPECT_FALSE(observer.IsHistorySyncEnabledOnAllProfiles()); + EXPECT_FALSE(observer.ResetNotified()); + EXPECT_FALSE(observer.ResetPurged()); +} + +TEST_F(SyncDisableObserverTest, MixedProfiles1) { + TestSyncDisableObserver observer; + MockSyncService sync1; + sync1.SetStatus(false, false); + observer.ObserveServiceForSyncDisables(&sync1); + MockSyncService sync2; + sync2.SetStatus(false, true); + observer.ObserveServiceForSyncDisables(&sync2); + EXPECT_FALSE(observer.IsHistorySyncEnabledOnAllProfiles()); + EXPECT_FALSE(observer.ResetNotified()); + EXPECT_FALSE(observer.ResetPurged()); +} + +TEST_F(SyncDisableObserverTest, MixedProfiles2) { + TestSyncDisableObserver observer; + MockSyncService sync1; + sync1.SetStatus(false, true); + observer.ObserveServiceForSyncDisables(&sync1); + EXPECT_TRUE(observer.ResetNotified()); + MockSyncService sync2; + sync2.SetStatus(false, false); + observer.ObserveServiceForSyncDisables(&sync2); + EXPECT_FALSE(observer.IsHistorySyncEnabledOnAllProfiles()); + EXPECT_TRUE(observer.ResetNotified()); + EXPECT_FALSE(observer.ResetPurged()); + sync2.Shutdown(); + EXPECT_TRUE(observer.IsHistorySyncEnabledOnAllProfiles()); + EXPECT_TRUE(observer.ResetNotified()); + EXPECT_FALSE(observer.ResetPurged()); +} + +TEST_F(SyncDisableObserverTest, TwoEnabled) { + TestSyncDisableObserver observer; + MockSyncService sync1; + sync1.SetStatus(false, true); + observer.ObserveServiceForSyncDisables(&sync1); + EXPECT_TRUE(observer.ResetNotified()); + MockSyncService sync2; + sync2.SetStatus(false, true); + observer.ObserveServiceForSyncDisables(&sync2); + EXPECT_TRUE(observer.IsHistorySyncEnabledOnAllProfiles()); + EXPECT_FALSE(observer.ResetNotified()); + EXPECT_FALSE(observer.ResetPurged()); +} + +TEST_F(SyncDisableObserverTest, OneAddRemove) { + TestSyncDisableObserver observer; + MockSyncService sync; + observer.ObserveServiceForSyncDisables(&sync); + EXPECT_FALSE(observer.IsHistorySyncEnabledOnAllProfiles()); + EXPECT_FALSE(observer.ResetNotified()); + EXPECT_FALSE(observer.ResetPurged()); + sync.SetStatus(false, true); + EXPECT_TRUE(observer.IsHistorySyncEnabledOnAllProfiles()); + EXPECT_TRUE(observer.ResetNotified()); + EXPECT_FALSE(observer.ResetPurged()); + sync.Shutdown(); + EXPECT_FALSE(observer.IsHistorySyncEnabledOnAllProfiles()); + EXPECT_TRUE(observer.ResetNotified()); + EXPECT_FALSE(observer.ResetPurged()); +} + +TEST_F(SyncDisableObserverTest, PurgeOnDisable) { + TestSyncDisableObserver observer; + MockSyncService sync; + sync.SetStatus(false, true); + observer.ObserveServiceForSyncDisables(&sync); + EXPECT_TRUE(observer.IsHistorySyncEnabledOnAllProfiles()); + EXPECT_TRUE(observer.ResetNotified()); + EXPECT_FALSE(observer.ResetPurged()); + sync.SetStatus(false, false); + EXPECT_FALSE(observer.IsHistorySyncEnabledOnAllProfiles()); + EXPECT_TRUE(observer.ResetNotified()); + EXPECT_TRUE(observer.ResetPurged()); + sync.Shutdown(); + EXPECT_FALSE(observer.IsHistorySyncEnabledOnAllProfiles()); + EXPECT_FALSE(observer.ResetNotified()); + EXPECT_FALSE(observer.ResetPurged()); +} + +} // namespace ukm
diff --git a/components/ukm/test_ukm_service.cc b/components/ukm/test_ukm_service.cc index 5b72405..d2f4c125 100644 --- a/components/ukm/test_ukm_service.cc +++ b/components/ukm/test_ukm_service.cc
@@ -18,6 +18,7 @@ TestUkmService::TestUkmService(PrefService* prefs_service) : UkmService(prefs_service, &test_metrics_service_client_) { + EnableRecording(); DisableReporting(); }
diff --git a/components/ukm/ukm_service.cc b/components/ukm/ukm_service.cc index b7cdcab..4e0a66a8 100644 --- a/components/ukm/ukm_service.cc +++ b/components/ukm/ukm_service.cc
@@ -69,17 +69,35 @@ return kDefaultServerUrl; } +// Generates a new client id and stores it in prefs. +uint64_t GenerateClientId(PrefService* pref_service) { + uint64_t client_id = 0; + while (!client_id) + client_id = base::RandUint64(); + pref_service->SetInt64(prefs::kUkmClientId, client_id); + return client_id; +} + uint64_t LoadOrGenerateClientId(PrefService* pref_service) { uint64_t client_id = pref_service->GetInt64(prefs::kUkmClientId); - if (!client_id) { - // Generate and store a new client id. - while (!client_id) - client_id = base::RandUint64(); - pref_service->SetInt64(prefs::kUkmClientId, client_id); - } + if (!client_id) + client_id = GenerateClientId(pref_service); return client_id; } +enum class DroppedSourceReason { + NOT_DROPPED = 0, + RECORDING_DISABLED = 1, + MAX_SOURCES_HIT = 2, + NUM_DROPPED_SOURCES_REASONS +}; + +void RecordDroppedSource(DroppedSourceReason reason) { + UMA_HISTOGRAM_ENUMERATION( + "UKM.Sources.Dropped", static_cast<int>(reason), + static_cast<int>(DroppedSourceReason::NUM_DROPPED_SOURCES_REASONS)); +} + } // namespace const base::Feature kUkmFeature = {"Ukm", base::FEATURE_DISABLED_BY_DEFAULT}; @@ -87,6 +105,7 @@ UkmService::UkmService(PrefService* pref_service, metrics::MetricsServiceClient* client) : pref_service_(pref_service), + recording_enabled_(false), client_(client), persisted_logs_(std::unique_ptr<ukm::PersistedLogsMetricsImpl>( new ukm::PersistedLogsMetricsImpl()), @@ -134,6 +153,14 @@ base::TimeDelta::FromSeconds(kInitializationDelaySeconds)); } +void UkmService::EnableRecording() { + recording_enabled_ = true; +} + +void UkmService::DisableRecording() { + recording_enabled_ = false; +} + void UkmService::EnableReporting() { DCHECK(thread_checker_.CalledOnValidThread()); DVLOG(1) << "UkmService::EnableReporting"; @@ -169,6 +196,10 @@ sources_.clear(); } +void UkmService::ResetClientId() { + client_id_ = GenerateClientId(pref_service_); +} + void UkmService::RegisterMetricsProvider( std::unique_ptr<metrics::MetricsProvider> provider) { metrics_providers_.push_back(std::move(provider)); @@ -208,6 +239,10 @@ void UkmService::BuildAndStoreLog() { DCHECK(thread_checker_.CalledOnValidThread()); DVLOG(1) << "UkmService::BuildAndStoreLog"; + // Suppress generating a log if we have no new data to include. + if (sources_.empty()) + return; + Report report; report.set_client_id(client_id_); @@ -233,6 +268,11 @@ void UkmService::StartScheduledUpload() { DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(!log_upload_in_progress_); + if (persisted_logs_.empty()) { + // No logs to send, so early out and schedule the next rotation. + scheduler_->UploadFinished(true, /* has_unsent_logs */ false); + return; + } if (!persisted_logs_.has_staged_log()) persisted_logs_.StageLog(); // TODO(holte): Handle data usage on cellular, etc. @@ -282,8 +322,12 @@ } void UkmService::RecordSource(std::unique_ptr<UkmSource> source) { + if (!recording_enabled_) { + RecordDroppedSource(DroppedSourceReason::RECORDING_DISABLED); + return; + } if (sources_.size() >= kMaxSources) { - UMA_HISTOGRAM_BOOLEAN("UKM.Sources.MaxSourcesHit", true); + RecordDroppedSource(DroppedSourceReason::MAX_SOURCES_HIT); return; }
diff --git a/components/ukm/ukm_service.h b/components/ukm/ukm_service.h index 181ad08..249871f 100644 --- a/components/ukm/ukm_service.h +++ b/components/ukm/ukm_service.h
@@ -47,6 +47,10 @@ // Initializes the UKM service. void Initialize(); + // Enables/disables recording control if data is allowed to be collected. + void EnableRecording(); + void DisableRecording(); + // Enables/disables transmission of accumulated logs. Logs that have already // been created will remain persisted to disk. void EnableReporting(); @@ -62,6 +66,9 @@ // Deletes any unsent local data. void Purge(); + // Resets the client id stored in prefs. + void ResetClientId(); + // Registers the specified |provider| to provide additional metrics into the // UKM log. Should be called during MetricsService initialization only. void RegisterMetricsProvider( @@ -100,6 +107,9 @@ // A weak pointer to the PrefService used to read and write preferences. PrefService* pref_service_; + // Whether recording new data is currently allowed. + bool recording_enabled_; + // The UKM client id stored in prefs. uint64_t client_id_;
diff --git a/components/ukm/ukm_service_unittest.cc b/components/ukm/ukm_service_unittest.cc index cc694e1..f6b91c0 100644 --- a/components/ukm/ukm_service_unittest.cc +++ b/components/ukm/ukm_service_unittest.cc
@@ -41,6 +41,7 @@ } Report GetPersistedReport() { + EXPECT_GE(GetPersistedLogCount(), 1); metrics::PersistedLogs result_persisted_logs( base::MakeUnique<ukm::PersistedLogsMetricsImpl>(), &prefs_, prefs::kUkmPersistedLogs, @@ -60,6 +61,14 @@ return report; } + std::unique_ptr<UkmSource> MakeSource(std::string url, int paint_msec) { + auto source = base::MakeUnique<UkmSource>(); + source->set_committed_url(GURL(url)); + source->set_first_contentful_paint( + base::TimeDelta::FromMilliseconds(paint_msec)); + return source; + } + protected: TestingPrefServiceSimple prefs_; metrics::TestMetricsServiceClient client_; @@ -80,6 +89,7 @@ EXPECT_TRUE(task_runner_->HasPendingTask()); // Allow initialization to complete. task_runner_->RunUntilIdle(); + service.EnableRecording(); service.EnableReporting(); EXPECT_TRUE(task_runner_->HasPendingTask()); service.DisableReporting(); @@ -92,11 +102,14 @@ EXPECT_EQ(GetPersistedLogCount(), 0); service.Initialize(); task_runner_->RunUntilIdle(); + service.EnableRecording(); service.EnableReporting(); + service.RecordSource(MakeSource("https://google.com", 300)); // Should init, generate a log, and start an upload. task_runner_->RunPendingTasks(); EXPECT_TRUE(client_.uploader()->is_uploading()); // Flushes the generated log to disk and generates a new one. + service.RecordSource(MakeSource("https://google.com", 300)); service.Flush(); EXPECT_EQ(GetPersistedLogCount(), 2); service.Purge(); @@ -108,13 +121,10 @@ EXPECT_EQ(GetPersistedLogCount(), 0); service.Initialize(); task_runner_->RunUntilIdle(); + service.EnableRecording(); service.EnableReporting(); - std::unique_ptr<UkmSource> source = base::WrapUnique(new UkmSource()); - source->set_committed_url(GURL("https://google.com")); - source->set_first_contentful_paint(base::TimeDelta::FromMilliseconds(300)); - - service.RecordSource(std::move(source)); + service.RecordSource(MakeSource("https://google.com", 300)); service.Flush(); EXPECT_EQ(GetPersistedLogCount(), 1); @@ -140,9 +150,10 @@ EXPECT_FALSE(provider->provide_system_profile_metrics_called()); task_runner_->RunUntilIdle(); + service.EnableRecording(); service.EnableReporting(); - service.RecordSource(base::WrapUnique(new UkmSource())); + service.RecordSource(MakeSource("https://google.com", 300)); service.Flush(); EXPECT_EQ(GetPersistedLogCount(), 1); @@ -153,4 +164,28 @@ EXPECT_TRUE(provider->provide_system_profile_metrics_called()); } +TEST_F(UkmServiceTest, LogsUploadedWithSourcesOnly) { + UkmService service(&prefs_, &client_); + EXPECT_EQ(GetPersistedLogCount(), 0); + service.Initialize(); + task_runner_->RunUntilIdle(); + service.EnableRecording(); + service.EnableReporting(); + + EXPECT_TRUE(task_runner_->HasPendingTask()); + // Neither rotation or Flush should generate logs + task_runner_->RunPendingTasks(); + service.Flush(); + EXPECT_EQ(GetPersistedLogCount(), 0); + + service.RecordSource(MakeSource("https://google.com", 300)); + // Includes a Source, so will persist. + service.Flush(); + EXPECT_EQ(GetPersistedLogCount(), 1); + + // Current log has no Sources. + service.Flush(); + EXPECT_EQ(GetPersistedLogCount(), 1); +} + } // namespace ukm
diff --git a/components/variations/proto/study.proto b/components/variations/proto/study.proto index 2b2f6116..c627622 100644 --- a/components/variations/proto/study.proto +++ b/components/variations/proto/study.proto
@@ -195,12 +195,13 @@ DESKTOP = 0; PHONE = 1; TABLET = 2; + KIOSK = 3; } // Filtering criteria specifying whether this study is applicable to a given // Chrome instance. // - // Next tag: 14 + // Next tag: 15 message Filter { // The start date of the study in Unix time format. (Seconds since midnight // January 1, 1970 UTC). See: http://en.wikipedia.org/wiki/Unix_time @@ -253,10 +254,17 @@ repeated string exclude_locale = 12; // List of form factors that will receive this study. If omitted, the study - // applies to all form factors. + // applies to all form factors, unless |exclude_form_factor| is specified. + // Mutually exclusive with |exclude_form_factor|. // Ex: [PHONE, TABLET] repeated FormFactor form_factor = 7; + // List of form factors that will be excluded from this study. If omitted, + // the study applies to all form factors unless |form_factor| is specified. + // Mutually exclusive with |form_factor|. + // Takes the same range of values as form_factor, e.g. [PHONE, TABLET]. + repeated FormFactor exclude_form_factor = 14; + // List of ChromeOS hardware classes that will receive this study. Each // entry is treated as a substring of the actual device hardware_class, // so "FOO" will match the client's hardware class "Device FOOBAR". If
diff --git a/components/variations/study_filtering.cc b/components/variations/study_filtering.cc index 5109251..0712c206 100644 --- a/components/variations/study_filtering.cc +++ b/components/variations/study_filtering.cc
@@ -59,15 +59,19 @@ bool CheckStudyFormFactor(const Study_Filter& filter, Study_FormFactor form_factor) { - // An empty form factor list matches all form factors. - if (filter.form_factor_size() == 0) + // Empty whitelist and blacklist signifies matching any form factor. + if (filter.form_factor_size() == 0 && filter.exclude_form_factor_size() == 0) return true; - for (int i = 0; i < filter.form_factor_size(); ++i) { - if (filter.form_factor(i) == form_factor) - return true; - } - return false; + // Allow the form_factor if it matches the whitelist. + // Note if both a whitelist and blacklist are specified, the blacklist is + // ignored. We do not expect both to be present for Chrome due to server-side + // checks. + if (filter.form_factor_size() > 0) + return base::ContainsValue(filter.form_factor(), form_factor); + + // Omit if we match the blacklist. + return !base::ContainsValue(filter.exclude_form_factor(), form_factor); } bool CheckStudyHardwareClass(const Study_Filter& filter,
diff --git a/components/variations/study_filtering_unittest.cc b/components/variations/study_filtering_unittest.cc index 98490f0..14f4f08 100644 --- a/components/variations/study_filtering_unittest.cc +++ b/components/variations/study_filtering_unittest.cc
@@ -84,6 +84,7 @@ Study_FormFactor_DESKTOP, Study_FormFactor_PHONE, Study_FormFactor_TABLET, + Study_FormFactor_KIOSK, }; ASSERT_EQ(Study_FormFactor_FormFactor_ARRAYSIZE, @@ -98,7 +99,8 @@ filter.form_factor_size() == 0; const bool result = internal::CheckStudyFormFactor(filter, form_factors[j]); - EXPECT_EQ(expected, result) << "Case " << i << "," << j << " failed!"; + EXPECT_EQ(expected, result) << "form_factor: case " << i << "," << j + << " failed!"; } if (i < arraysize(form_factors)) { @@ -116,7 +118,8 @@ filter.form_factor_size() == 0; const bool result = internal::CheckStudyFormFactor(filter, form_factors[j]); - EXPECT_EQ(expected, result) << "Case " << i << "," << j << " failed!"; + EXPECT_EQ(expected, result) << "form_factor: case " << i << "," << j + << " failed!"; } if (i < arraysize(form_factors)) { @@ -125,6 +128,45 @@ form_factor_added[index] = true; } } + + // Test exclude_form_factors, forward order. + filter.clear_form_factor(); + bool form_factor_excluded[arraysize(form_factors)] = { 0 }; + for (size_t i = 0; i <= arraysize(form_factors); ++i) { + for (size_t j = 0; j < arraysize(form_factors); ++j) { + const bool expected = filter.exclude_form_factor_size() == 0 || + !form_factor_excluded[j]; + const bool result = internal::CheckStudyFormFactor(filter, + form_factors[j]); + EXPECT_EQ(expected, result) << "exclude_form_factor: case " << i << "," + << j << " failed!"; + } + + if (i < arraysize(form_factors)) { + filter.add_exclude_form_factor(form_factors[i]); + form_factor_excluded[i] = true; + } + } + + // Test exclude_form_factors, reverse order. + filter.clear_exclude_form_factor(); + memset(&form_factor_excluded, 0, sizeof(form_factor_excluded)); + for (size_t i = 0; i <= arraysize(form_factors); ++i) { + for (size_t j = 0; j < arraysize(form_factors); ++j) { + const bool expected = filter.exclude_form_factor_size() == 0 || + !form_factor_excluded[j]; + const bool result = internal::CheckStudyFormFactor(filter, + form_factors[j]); + EXPECT_EQ(expected, result) << "exclude_form_factor: case " << i << "," + << j << " failed!"; + } + + if (i < arraysize(form_factors)) { + const int index = arraysize(form_factors) - i - 1; + filter.add_exclude_form_factor(form_factors[index]); + form_factor_excluded[index] = true; + } + } } TEST(VariationsStudyFilteringTest, CheckStudyLocale) {
diff --git a/content/app/android/child_process_service_impl.cc b/content/app/android/child_process_service_impl.cc index 6651317..ef6f171b 100644 --- a/content/app/android/child_process_service_impl.cc +++ b/content/app/android/child_process_service_impl.cc
@@ -19,11 +19,11 @@ #include "content/child/child_thread_impl.h" #include "content/public/common/content_descriptors.h" #include "gpu/ipc/common/android/scoped_surface_request_conduit.h" -#include "gpu/ipc/common/android/surface_texture_peer.h" #include "gpu/ipc/common/gpu_surface_lookup.h" #include "ipc/ipc_descriptors.h" #include "jni/ChildProcessServiceImpl_jni.h" #include "ui/gl/android/scoped_java_surface.h" +#include "ui/gl/android/surface_texture.h" using base::android::AttachCurrentThread; using base::android::CheckException; @@ -36,8 +36,7 @@ // TODO(sievers): Use two different implementations of this depending on if // we're in a renderer or gpu process. -class ChildProcessSurfaceManager : public gpu::SurfaceTexturePeer, - public gpu::ScopedSurfaceRequestConduit, +class ChildProcessSurfaceManager : public gpu::ScopedSurfaceRequestConduit, public gpu::GpuSurfaceLookup { public: ChildProcessSurfaceManager() {} @@ -49,18 +48,6 @@ service_impl_.Reset(service_impl); } - // Overridden from SurfaceTexturePeer: - void EstablishSurfaceTexturePeer( - base::ProcessHandle pid, - scoped_refptr<gl::SurfaceTexture> surface_texture, - int primary_id, - int secondary_id) override { - JNIEnv* env = base::android::AttachCurrentThread(); - content::Java_ChildProcessServiceImpl_establishSurfaceTexturePeer( - env, service_impl_, pid, surface_texture->j_surface_texture(), - primary_id, secondary_id); - } - // Overriden from ScopedSurfaceRequestConduit: void ForwardSurfaceTextureForSurfaceRequest( const base::UnguessableToken& request_token, @@ -124,8 +111,6 @@ g_child_process_surface_manager.Get().SetServiceImpl(service_impl); - gpu::SurfaceTexturePeer::InitInstance( - g_child_process_surface_manager.Pointer()); gpu::GpuSurfaceLookup::InitInstance( g_child_process_surface_manager.Pointer()); gpu::ScopedSurfaceRequestConduit::SetInstance(
diff --git a/content/browser/accessibility/accessibility_ui.cc b/content/browser/accessibility/accessibility_ui.cc index 671a09a..3d618513 100644 --- a/content/browser/accessibility/accessibility_ui.cc +++ b/content/browser/accessibility/accessibility_ui.cc
@@ -325,6 +325,10 @@ std::unique_ptr<base::DictionaryValue> result(BuildTargetDescriptor(rvh)); auto* web_contents = static_cast<WebContentsImpl*>(WebContents::FromRenderViewHost(rvh)); + // No matter the state of the current web_contents, we want to force the mode + // because we are about to show the accessibility tree + web_contents->SetAccessibilityMode(ACCESSIBILITY_MODE_FLAG_NATIVE_APIS | + ACCESSIBILITY_MODE_FLAG_WEB_CONTENTS); std::unique_ptr<AccessibilityTreeFormatter> formatter; if (g_show_internal_accessibility_tree) formatter.reset(new AccessibilityTreeFormatterBlink());
diff --git a/content/browser/android/child_process_launcher_android.cc b/content/browser/android/child_process_launcher_android.cc index ceb9a28b..bd16a7c 100644 --- a/content/browser/android/child_process_launcher_android.cc +++ b/content/browser/android/child_process_launcher_android.cc
@@ -37,60 +37,6 @@ namespace content { -namespace { - -// Pass a java surface object to the MediaPlayerAndroid object -// identified by render process handle, render frame ID and player ID. -static void SetSurfacePeer( - const base::android::JavaRef<jobject>& surface, - base::ProcessHandle render_process_handle, - int render_frame_id, - int player_id) { - int render_process_id = 0; - RenderProcessHost::iterator it = RenderProcessHost::AllHostsIterator(); - while (!it.IsAtEnd()) { - if (it.GetCurrentValue()->GetHandle() == render_process_handle) { - render_process_id = it.GetCurrentValue()->GetID(); - break; - } - it.Advance(); - } - if (!render_process_id) { - DVLOG(1) << "Cannot find render process for render_process_handle " - << render_process_handle; - return; - } - - RenderFrameHostImpl* frame = - RenderFrameHostImpl::FromID(render_process_id, render_frame_id); - if (!frame) { - DVLOG(1) << "Cannot find frame for render_frame_id " << render_frame_id; - return; - } - - BrowserMediaPlayerManager* player_manager = - MediaWebContentsObserverAndroid::FromWebContents( - WebContents::FromRenderFrameHost(frame)) - ->GetMediaPlayerManager(frame); - if (!player_manager) { - DVLOG(1) << "Cannot find the media player manager for frame " << frame; - return; - } - - media::MediaPlayerAndroid* player = player_manager->GetPlayer(player_id); - if (!player) { - DVLOG(1) << "Cannot find media player for player_id " << player_id; - return; - } - - if (player != player_manager->GetFullscreenPlayer()) { - gl::ScopedJavaSurface scoped_surface(surface); - player->SetVideoSurface(std::move(scoped_surface)); - } -} - -} // anonymous namespace - // Called from ChildProcessLauncher.java when the ChildProcess was // started. // |client_context| is the pointer to StartChildProcessCallback which was @@ -173,22 +119,6 @@ static_cast<jint>(handle), static_cast<jboolean>(in_foreground)); } -void EstablishSurfacePeer(JNIEnv* env, - const JavaParamRef<jclass>& clazz, - jint pid, - const JavaParamRef<jobject>& surface, - jint primary_id, - jint secondary_id) { - ScopedJavaGlobalRef<jobject> jsurface; - jsurface.Reset(env, surface); - if (jsurface.is_null()) - return; - - DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI)); - BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, base::Bind( - &SetSurfacePeer, jsurface, pid, primary_id, secondary_id)); -} - void CompleteScopedSurfaceRequest(JNIEnv* env, const JavaParamRef<jclass>& clazz, const JavaParamRef<jobject>& token,
diff --git a/content/browser/browser_child_process_host_impl.cc b/content/browser/browser_child_process_host_impl.cc index 6da88a2..8e51064b 100644 --- a/content/browser/browser_child_process_host_impl.cc +++ b/content/browser/browser_child_process_host_impl.cc
@@ -161,7 +161,7 @@ const std::string& service_name) : data_(process_type), delegate_(delegate), - child_token_(mojo::edk::GenerateRandomToken()), + pending_connection_(new mojo::edk::PendingProcessConnection), channel_(nullptr), is_channel_connected_(false), notify_child_disconnected_(false), @@ -179,10 +179,11 @@ if (!service_name.empty()) { DCHECK_CURRENTLY_ON(BrowserThread::IO); - child_connection_.reset(new ChildConnection( - service_name, base::StringPrintf("%d", data_.id), child_token_, - ServiceManagerContext::GetConnectorForIOThread(), - base::ThreadTaskRunnerHandle::Get())); + child_connection_.reset( + new ChildConnection(service_name, base::StringPrintf("%d", data_.id), + pending_connection_.get(), + ServiceManagerContext::GetConnectorForIOThread(), + base::ThreadTaskRunnerHandle::Get())); } // May be null during test execution. @@ -256,7 +257,8 @@ notify_child_disconnected_ = true; child_process_.reset(new ChildProcessLauncher( - std::move(delegate), std::move(cmd_line), data_.id, this, child_token_, + std::move(delegate), std::move(cmd_line), data_.id, this, + std::move(pending_connection_), base::Bind(&BrowserChildProcessHostImpl::OnMojoError, weak_factory_.GetWeakPtr(), base::ThreadTaskRunnerHandle::Get()),
diff --git a/content/browser/browser_child_process_host_impl.h b/content/browser/browser_child_process_host_impl.h index 0b2906f..3c78e6a 100644 --- a/content/browser/browser_child_process_host_impl.h +++ b/content/browser/browser_child_process_host_impl.h
@@ -22,6 +22,7 @@ #include "content/public/browser/browser_child_process_host.h" #include "content/public/browser/child_process_data.h" #include "content/public/common/child_process_host_delegate.h" +#include "mojo/edk/embedder/pending_process_connection.h" #if defined(OS_WIN) #include "base/win/object_watcher.h" @@ -156,7 +157,7 @@ BrowserChildProcessHostDelegate* delegate_; std::unique_ptr<ChildProcessHost> child_process_host_; - const std::string child_token_; + std::unique_ptr<mojo::edk::PendingProcessConnection> pending_connection_; std::unique_ptr<ChildConnection> child_connection_; std::unique_ptr<ChildProcessLauncher> child_process_;
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc index bfab0fb..cfaddafe 100644 --- a/content/browser/browser_main_loop.cc +++ b/content/browser/browser_main_loop.cc
@@ -786,7 +786,6 @@ gpu::ScopedSurfaceRequestConduit::SetInstance( ScopedSurfaceRequestManager::GetInstance()); } - BrowserMediaPlayerManager::InitSurfaceTexturePeer(); } if (!parsed_command_line_.HasSwitch(
diff --git a/content/browser/child_process_launcher.cc b/content/browser/child_process_launcher.cc index 6970d24..3700f47e 100644 --- a/content/browser/child_process_launcher.cc +++ b/content/browser/child_process_launcher.cc
@@ -23,13 +23,14 @@ std::unique_ptr<base::CommandLine> command_line, int child_process_id, Client* client, - const std::string& mojo_child_token, + std::unique_ptr<mojo::edk::PendingProcessConnection> pending_connection, const mojo::edk::ProcessErrorCallback& process_error_callback, bool terminate_on_shutdown) : client_(client), termination_status_(base::TERMINATION_STATUS_NORMAL_TERMINATION), exit_code_(RESULT_CODE_NORMAL_EXIT), starting_(true), + pending_connection_(std::move(pending_connection)), process_error_callback_(process_error_callback), #if defined(ADDRESS_SANITIZER) || defined(LEAK_SANITIZER) || \ defined(MEMORY_SANITIZER) || defined(THREAD_SANITIZER) || \ @@ -38,7 +39,6 @@ #else terminate_child_on_shutdown_(terminate_on_shutdown), #endif - mojo_child_token_(mojo_child_token), weak_factory_(this) { DCHECK(CalledOnValidThread()); CHECK(BrowserThread::GetCurrentThreadIdentifier(&client_thread_id_)); @@ -78,16 +78,21 @@ starting_ = false; process_ = std::move(process); + // Take ownership of the pending connection here so it's destroyed when + // we go out of scope regardless of the outcome below. + std::unique_ptr<mojo::edk::PendingProcessConnection> pending_connection = + std::move(pending_connection_); if (process_.process.IsValid()) { // Set up Mojo IPC to the new process. - mojo::edk::ChildProcessLaunched(process_.process.Handle(), - std::move(server_handle), - mojo_child_token_, - process_error_callback_); + DCHECK(pending_connection); + pending_connection->Connect(process_.process.Handle(), + std::move(server_handle), + process_error_callback_); client_->OnProcessLaunched(); } else { - mojo::edk::ChildProcessLaunchFailed(mojo_child_token_); termination_status_ = base::TERMINATION_STATUS_LAUNCH_FAILED; + + // NOTE: May delete |this|. client_->OnProcessLaunchFailed(error_code); } }
diff --git a/content/browser/child_process_launcher.h b/content/browser/child_process_launcher.h index 6a17aa02..0ff1baa 100644 --- a/content/browser/child_process_launcher.h +++ b/content/browser/child_process_launcher.h
@@ -19,7 +19,7 @@ #include "content/common/content_export.h" #include "content/public/browser/browser_thread.h" #include "content/public/common/result_codes.h" -#include "mojo/edk/embedder/embedder.h" +#include "mojo/edk/embedder/pending_process_connection.h" #include "mojo/edk/embedder/scoped_platform_handle.h" namespace base { @@ -80,7 +80,7 @@ std::unique_ptr<base::CommandLine> cmd_line, int child_process_id, Client* client, - const std::string& mojo_child_token, + std::unique_ptr<mojo::edk::PendingProcessConnection> pending_connection, const mojo::edk::ProcessErrorCallback& process_error_callback, bool terminate_on_shutdown = true); ~ChildProcessLauncher(); @@ -146,14 +146,13 @@ base::TerminationStatus termination_status_; int exit_code_; bool starting_; + std::unique_ptr<mojo::edk::PendingProcessConnection> pending_connection_; const mojo::edk::ProcessErrorCallback process_error_callback_; // Controls whether the child process should be terminated on browser // shutdown. Default behavior is to terminate the child. const bool terminate_child_on_shutdown_; - const std::string mojo_child_token_; - scoped_refptr<internal::ChildProcessLauncherHelper> helper_; base::WeakPtrFactory<ChildProcessLauncher> weak_factory_;
diff --git a/content/browser/frame_host/frame_tree_node.cc b/content/browser/frame_host/frame_tree_node.cc index 26591467..fd58bcb 100644 --- a/content/browser/frame_host/frame_tree_node.cc +++ b/content/browser/frame_host/frame_tree_node.cc
@@ -286,7 +286,7 @@ replication_state_.feature_policy_header = parsed_header; } -void FrameTreeNode::ResetFeaturePolicy() { +void FrameTreeNode::ResetFeaturePolicyHeader() { replication_state_.feature_policy_header.clear(); }
diff --git a/content/browser/frame_host/frame_tree_node.h b/content/browser/frame_host/frame_tree_node.h index 503911b..7a4a0b9e2 100644 --- a/content/browser/frame_host/frame_tree_node.h +++ b/content/browser/frame_host/frame_tree_node.h
@@ -161,12 +161,11 @@ // Set the current name and notify proxies about the update. void SetFrameName(const std::string& name, const std::string& unique_name); - // Set the frame's feature policy from an HTTP header, clearing any existing - // policy. + // Set the frame's feature policy header, clearing any existing header. void SetFeaturePolicyHeader(const ParsedFeaturePolicyHeader& parsed_header); - // Clear any feature policy associated with the frame. - void ResetFeaturePolicy(); + // Clear any feature policy header associated with the frame. + void ResetFeaturePolicyHeader(); // Add CSP header to replication state and notify proxies about the update. void AddContentSecurityPolicy(const ContentSecurityPolicyHeader& header);
diff --git a/content/browser/frame_host/navigator_impl.cc b/content/browser/frame_host/navigator_impl.cc index 99780593..94204144 100644 --- a/content/browser/frame_host/navigator_impl.cc +++ b/content/browser/frame_host/navigator_impl.cc
@@ -618,7 +618,7 @@ // <meta> elements - we need to reset CSP and Feature Policy. if (!is_navigation_within_page) { render_frame_host->frame_tree_node()->ResetContentSecurityPolicy(); - render_frame_host->frame_tree_node()->ResetFeaturePolicy(); + render_frame_host->frame_tree_node()->ResetFeaturePolicyHeader(); } // When using --site-per-process, we notify the RFHM for all navigations, @@ -688,6 +688,10 @@ if (!params.url_is_unreachable) render_frame_host->set_last_successful_url(params.url); + // After setting the last committed origin, reset the feature policy in the + // RenderFrameHost to a blank policy based on the parent frame. + render_frame_host->ResetFeaturePolicy(); + // Send notification about committed provisional loads. This notification is // different from the NAV_ENTRY_COMMITTED notification which doesn't include // the actual URL navigated to and isn't sent for AUTO_SUBFRAME navigations.
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc index 6c04e23..8e6dff68 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -1850,6 +1850,8 @@ void RenderFrameHostImpl::OnDidSetFeaturePolicyHeader( const ParsedFeaturePolicyHeader& parsed_header) { frame_tree_node()->SetFeaturePolicyHeader(parsed_header); + ResetFeaturePolicy(); + feature_policy_->SetHeaderPolicy(parsed_header); } void RenderFrameHostImpl::OnDidAddContentSecurityPolicy( @@ -3391,6 +3393,14 @@ web_bluetooth_services_.erase(it); } +void RenderFrameHostImpl::ResetFeaturePolicy() { + RenderFrameHostImpl* parent_frame_host = GetParent(); + const FeaturePolicy* parent_policy = + parent_frame_host ? parent_frame_host->get_feature_policy() : nullptr; + feature_policy_ = FeaturePolicy::CreateFromParentPolicy( + parent_policy, last_committed_origin_); +} + void RenderFrameHostImpl::Create( const service_manager::Identity& remote_identity, media::mojom::InterfaceFactoryRequest request) {
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h index 80b1c538..162ed20 100644 --- a/content/browser/frame_host/render_frame_host_impl.h +++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -81,6 +81,7 @@ class AppWebMessagePortMessageFilter; class AssociatedInterfaceProviderImpl; class CrossProcessFrameConnector; +class FeaturePolicy; class FrameTree; class FrameTreeNode; class MediaInterfaceProxy; @@ -595,6 +596,13 @@ // in a non-loading state. void ResetLoadingState(); + // Returns the feature policy which should be enforced on this RenderFrame. + FeaturePolicy* get_feature_policy() { return feature_policy_.get(); } + + // Clears any existing policy and constructs a new policy for this frame, + // based on its parent frame. + void ResetFeaturePolicy(); + // Tells the renderer that this RenderFrame will soon be swapped out, and thus // not to create any new modal dialogs until it happens. This must be done // separately so that the ScopedPageLoadDeferrers of any current dialogs are @@ -1155,6 +1163,9 @@ // See BindingsPolicy for details. int enabled_bindings_ = 0; + // Tracks the feature policy which has been set on this frame. + std::unique_ptr<FeaturePolicy> feature_policy_; + // NOTE: This must be the last member. base::WeakPtrFactory<RenderFrameHostImpl> weak_ptr_factory_;
diff --git a/content/browser/media/android/browser_media_player_manager.cc b/content/browser/media/android/browser_media_player_manager.cc index 906f9d8..d73137b1 100644 --- a/content/browser/media/android/browser_media_player_manager.cc +++ b/content/browser/media/android/browser_media_player_manager.cc
@@ -26,7 +26,6 @@ #include "content/public/browser/web_contents_delegate.h" #include "content/public/common/content_client.h" #include "content/public/common/content_switches.h" -#include "gpu/ipc/common/android/surface_texture_peer.h" #include "media/base/android/media_player_bridge.h" #include "media/base/android/media_url_interceptor.h" #include "media/base/media_content_type.h" @@ -42,57 +41,6 @@ namespace content { -namespace { - -class BrowserSurfaceTexturePeer : public gpu::SurfaceTexturePeer { - public: - static BrowserSurfaceTexturePeer* GetInstance(); - - private: - friend struct base::DefaultSingletonTraits<BrowserSurfaceTexturePeer>; - - BrowserSurfaceTexturePeer(); - ~BrowserSurfaceTexturePeer() override; - - void EstablishSurfaceTexturePeer( - base::ProcessHandle render_process_handle, - scoped_refptr<gl::SurfaceTexture> surface_texture, - int render_frame_id, - int player_id) override; - - DISALLOW_COPY_AND_ASSIGN(BrowserSurfaceTexturePeer); -}; - -// static -BrowserSurfaceTexturePeer* BrowserSurfaceTexturePeer::GetInstance() { - return base::Singleton< - BrowserSurfaceTexturePeer, - base::LeakySingletonTraits<BrowserSurfaceTexturePeer>>::get(); -} - -BrowserSurfaceTexturePeer::BrowserSurfaceTexturePeer() { - gpu::SurfaceTexturePeer::InitInstance(this); -} - -BrowserSurfaceTexturePeer::~BrowserSurfaceTexturePeer() { - gpu::SurfaceTexturePeer::InitInstance(nullptr); -} - -void BrowserSurfaceTexturePeer::EstablishSurfaceTexturePeer( - base::ProcessHandle render_process_handle, - scoped_refptr<gl::SurfaceTexture> surface_texture, - int render_frame_id, - int player_id) { - if (!surface_texture.get()) - return; - BrowserThread::PostTask( - BrowserThread::UI, FROM_HERE, - base::Bind(&BrowserMediaPlayerManager::SetSurfacePeer, surface_texture, - render_process_handle, render_frame_id, player_id)); -} - -} // namespace - // Threshold on the number of media players per renderer before we start // attempting to release inactive media players. const int kMediaPlayerThreshold = 1; @@ -118,61 +66,6 @@ } // static -void BrowserMediaPlayerManager::InitSurfaceTexturePeer() { - BrowserSurfaceTexturePeer::GetInstance(); -} - -// static -void BrowserMediaPlayerManager::SetSurfacePeer( - scoped_refptr<gl::SurfaceTexture> surface_texture, - base::ProcessHandle render_process_handle, - int render_frame_id, - int player_id) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - int render_process_id = 0; - RenderProcessHost::iterator it = RenderProcessHost::AllHostsIterator(); - while (!it.IsAtEnd()) { - if (it.GetCurrentValue()->GetHandle() == render_process_handle) { - render_process_id = it.GetCurrentValue()->GetID(); - break; - } - it.Advance(); - } - if (!render_process_id) { - DVLOG(1) << "Cannot find render process for render_process_handle " - << render_process_handle; - return; - } - - RenderFrameHostImpl* frame = - RenderFrameHostImpl::FromID(render_process_id, render_frame_id); - if (!frame) { - DVLOG(1) << "Cannot find frame for render_frame_id " << render_frame_id; - return; - } - - BrowserMediaPlayerManager* player_manager = - MediaWebContentsObserverAndroid::FromWebContents( - WebContents::FromRenderFrameHost(frame)) - ->GetMediaPlayerManager(frame); - if (!player_manager) { - DVLOG(1) << "Cannot find the media player manager for frame " << frame; - return; - } - - media::MediaPlayerAndroid* player = player_manager->GetPlayer(player_id); - if (!player) { - DVLOG(1) << "Cannot find media player for player_id " << player_id; - return; - } - - if (player != player_manager->GetFullscreenPlayer()) { - gl::ScopedJavaSurface scoped_surface(surface_texture.get()); - player->SetVideoSurface(std::move(scoped_surface)); - } -} - -// static BrowserMediaPlayerManager* BrowserMediaPlayerManager::Create( RenderFrameHost* rfh) { if (g_factory)
diff --git a/content/browser/media/android/browser_media_player_manager.h b/content/browser/media/android/browser_media_player_manager.h index 6d50830c..fe626c1 100644 --- a/content/browser/media/android/browser_media_player_manager.h +++ b/content/browser/media/android/browser_media_player_manager.h
@@ -48,16 +48,6 @@ static void RegisterMediaUrlInterceptor( media::MediaUrlInterceptor* media_url_interceptor); - // Init the SurfaceTexturePeer. - static void InitSurfaceTexturePeer(); - - // Pass a java surface object to the MediaPlayerAndroid object - // identified by render process handle, render frame ID and player ID. - static void SetSurfacePeer(scoped_refptr<gl::SurfaceTexture> surface_texture, - base::ProcessHandle render_process_handle, - int render_frame_id, - int player_id); - // Returns a new instance using the registered factory if available. static BrowserMediaPlayerManager* Create(RenderFrameHost* rfh);
diff --git a/content/browser/media/capture/cursor_renderer.h b/content/browser/media/capture/cursor_renderer.h index 65a089e..a26e043 100644 --- a/content/browser/media/capture/cursor_renderer.h +++ b/content/browser/media/capture/cursor_renderer.h
@@ -85,6 +85,7 @@ private: friend class CursorRendererAuraTest; + friend class CursorRendererMacTest; const gfx::NativeView captured_view_;
diff --git a/content/browser/media/capture/cursor_renderer_mac.h b/content/browser/media/capture/cursor_renderer_mac.h index 173edba..2da16c07 100644 --- a/content/browser/media/capture/cursor_renderer_mac.h +++ b/content/browser/media/capture/cursor_renderer_mac.h
@@ -44,6 +44,8 @@ SkBitmap GetLastKnownCursorImage(gfx::Point* hot_point) final; private: + friend class CursorRendererMacTest; + // Called for mouse activity events. void OnMouseEvent();
diff --git a/content/browser/media/capture/cursor_renderer_mac_unittest.mm b/content/browser/media/capture/cursor_renderer_mac_unittest.mm new file mode 100644 index 0000000..326e5ad --- /dev/null +++ b/content/browser/media/capture/cursor_renderer_mac_unittest.mm
@@ -0,0 +1,183 @@ +// 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 "content/browser/media/capture/cursor_renderer_mac.h" + +#include <Cocoa/Cocoa.h> + +#include "base/mac/scoped_nsobject.h" +#include "base/memory/ptr_util.h" +#include "base/test/simple_test_tick_clock.h" +#include "media/base/video_frame.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/gfx/mac/coordinate_conversion.h" +#include "ui/gfx/test/ui_cocoa_test_helper.h" + +namespace content { + +const int kTestViewWidth = 800; +const int kTestViewHeight = 600; + +class CursorRendererMacTest : public ui::CocoaTest { + public: + CursorRendererMacTest() {} + ~CursorRendererMacTest() override{}; + + void SetUp() override { + ui::CocoaTest::SetUp(); + base::scoped_nsobject<NSView> view([[NSView alloc] + initWithFrame:NSMakeRect(0, 0, kTestViewWidth, kTestViewHeight)]); + view_ = view.get(); + [[test_window() contentView] addSubview:view_]; + + cursor_renderer_.reset(new CursorRendererMac(view_)); + } + + void TearDown() override { + cursor_renderer_.reset(); + ui::CocoaTest::TearDown(); + } + + void SetTickClock(base::SimpleTestTickClock* clock) { + cursor_renderer_->tick_clock_ = clock; + } + + bool CursorDisplayed() { return cursor_renderer_->cursor_displayed_; } + + void RenderCursorOnVideoFrame(media::VideoFrame* target) { + cursor_renderer_->RenderOnVideoFrame(target); + } + + void SnapshotCursorState(gfx::Rect region_in_frame) { + cursor_renderer_->SnapshotCursorState(region_in_frame); + } + + // Here the |point| is in Aura coordinates (the origin (0, 0) is at top-left + // of the view). To move the cursor to that point by Quartz Display service, + // it needs to be converted into Cocoa coordinates (the origin is at + // bottom-left of the main screen) first, and then info Quartz coordinates + // (the origin is at top-left of the main display). + void MoveMouseCursorWithinWindow(gfx::Point point) { + point.set_y(kTestViewHeight - point.y()); + CGWarpMouseCursorPosition(gfx::ScreenPointToNSPoint(point)); + cursor_renderer_->OnMouseEvent(); + } + + void MoveMouseCursorWithinWindow() { + CGWarpMouseCursorPosition( + gfx::ScreenPointToNSPoint(gfx::Point(50, kTestViewHeight - 50))); + cursor_renderer_->OnMouseEvent(); + + CGWarpMouseCursorPosition( + gfx::ScreenPointToNSPoint(gfx::Point(100, kTestViewHeight - 100))); + cursor_renderer_->OnMouseEvent(); + } + + void MoveMouseCursorOutsideWindow() { + CGWarpMouseCursorPosition(CGPointMake(1000, 200)); + cursor_renderer_->OnMouseEvent(); + } + + // A very simple test of whether there are any non-zero pixels + // in the region |rect| within |frame|. + bool NonZeroPixelsInRegion(scoped_refptr<media::VideoFrame> frame, + gfx::Rect rect) { + bool y_found = false, u_found = false, v_found = false; + for (int y = rect.y(); y < rect.bottom(); ++y) { + uint8_t* yplane = frame->data(media::VideoFrame::kYPlane) + + y * frame->row_bytes(media::VideoFrame::kYPlane); + uint8_t* uplane = frame->data(media::VideoFrame::kUPlane) + + (y / 2) * frame->row_bytes(media::VideoFrame::kUPlane); + uint8_t* vplane = frame->data(media::VideoFrame::kVPlane) + + (y / 2) * frame->row_bytes(media::VideoFrame::kVPlane); + for (int x = rect.x(); x < rect.right(); ++x) { + if (yplane[x] != 0) + y_found = true; + if (uplane[x / 2]) + u_found = true; + if (vplane[x / 2]) + v_found = true; + } + } + return (y_found && u_found && v_found); + } + + protected: + NSView* view_; + std::unique_ptr<CursorRendererMac> cursor_renderer_; +}; + +TEST_F(CursorRendererMacTest, CursorDuringMouseMovement) { + // Keep window activated. + [test_window() setPretendIsKeyWindow:YES]; + + EXPECT_FALSE(CursorDisplayed()); + + base::SimpleTestTickClock clock; + SetTickClock(&clock); + + // Cursor displayed after mouse movement. + MoveMouseCursorWithinWindow(); + EXPECT_TRUE(CursorDisplayed()); + + // Cursor not be displayed after idle period. + clock.SetNowTicks(base::TimeTicks::Now()); + clock.Advance(base::TimeDelta::FromSeconds(5)); + SnapshotCursorState(gfx::Rect(10, 10, 200, 200)); + EXPECT_FALSE(CursorDisplayed()); + clock.SetNowTicks(base::TimeTicks::Now()); + + // Cursor displayed with mouse movement following idle period. + MoveMouseCursorWithinWindow(); + SnapshotCursorState(gfx::Rect(10, 10, 200, 200)); + EXPECT_TRUE(CursorDisplayed()); + + // Cursor not displayed if mouse outside the window + MoveMouseCursorOutsideWindow(); + SnapshotCursorState(gfx::Rect(10, 10, 200, 200)); + EXPECT_FALSE(CursorDisplayed()); +} + +TEST_F(CursorRendererMacTest, CursorOnActiveWindow) { + EXPECT_FALSE(CursorDisplayed()); + + // Cursor displayed after mouse movement. + [test_window() setPretendIsKeyWindow:YES]; + MoveMouseCursorWithinWindow(); + EXPECT_TRUE(CursorDisplayed()); + + // Cursor not be displayed if window is not activated. + [test_window() setPretendIsKeyWindow:NO]; + SnapshotCursorState(gfx::Rect(10, 10, 200, 200)); + EXPECT_FALSE(CursorDisplayed()); + + // Cursor is displayed again if window is activated again. + [test_window() setPretendIsKeyWindow:YES]; + MoveMouseCursorWithinWindow(); + SnapshotCursorState(gfx::Rect(10, 10, 200, 200)); + EXPECT_TRUE(CursorDisplayed()); +} + +TEST_F(CursorRendererMacTest, CursorRenderedOnFrame) { + // Keep window activated. + [test_window() setPretendIsKeyWindow:YES]; + + EXPECT_FALSE(CursorDisplayed()); + + gfx::Size size(kTestViewWidth, kTestViewHeight); + scoped_refptr<media::VideoFrame> frame = + media::VideoFrame::CreateZeroInitializedFrame(media::PIXEL_FORMAT_YV12, + size, gfx::Rect(size), size, + base::TimeDelta()); + + MoveMouseCursorWithinWindow(gfx::Point(60, 60)); + SnapshotCursorState(gfx::Rect(size)); + EXPECT_TRUE(CursorDisplayed()); + + EXPECT_FALSE(NonZeroPixelsInRegion(frame, gfx::Rect(50, 50, 70, 70))); + RenderCursorOnVideoFrame(frame.get()); + EXPECT_TRUE(NonZeroPixelsInRegion(frame, gfx::Rect(50, 50, 70, 70))); +} + +} // namespace content
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index 6f88159..8e4112c0 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -830,6 +830,7 @@ // null, so we re-initialize it here. if (!channel_) InitializeChannelProxy(); + DCHECK(pending_connection_); // Unpause the Channel briefly. This will be paused again below if we launch a // real child process. Note that messages may be sent in the short window @@ -910,7 +911,7 @@ // at this stage. child_process_launcher_.reset(new ChildProcessLauncher( base::MakeUnique<RendererSandboxedProcessLauncherDelegate>(), - std::move(cmd_line), GetID(), this, child_token_, + std::move(cmd_line), GetID(), this, std::move(pending_connection_), base::Bind(&RenderProcessHostImpl::OnMojoError, id_))); channel_->Pause(); @@ -933,9 +934,6 @@ } void RenderProcessHostImpl::InitializeChannelProxy() { - // Generate a token used to identify the new child process. - child_token_ = mojo::edk::GenerateRandomToken(); - scoped_refptr<base::SingleThreadTaskRunner> io_task_runner = BrowserThread::GetTaskRunnerForThread(BrowserThread::IO); @@ -960,10 +958,11 @@ } // Establish a ServiceManager connection for the new render service instance. + pending_connection_.reset(new mojo::edk::PendingProcessConnection); child_connection_.reset(new ChildConnection( mojom::kRendererServiceName, - base::StringPrintf("%d_%d", id_, instance_id_++), child_token_, connector, - io_task_runner)); + base::StringPrintf("%d_%d", id_, instance_id_++), + pending_connection_.get(), connector, io_task_runner)); // Send an interface request to bootstrap the IPC::Channel. Note that this // request will happily sit on the pipe until the process is launched and
diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h index a7c2fa32..0ef85c8 100644 --- a/content/browser/renderer_host/render_process_host_impl.h +++ b/content/browser/renderer_host/render_process_host_impl.h
@@ -33,6 +33,7 @@ #include "ipc/ipc_channel_proxy.h" #include "ipc/ipc_platform_file.h" #include "media/media_features.h" +#include "mojo/edk/embedder/pending_process_connection.h" #include "mojo/public/cpp/bindings/associated_binding.h" #include "mojo/public/cpp/bindings/associated_binding_set.h" #include "mojo/public/cpp/bindings/interface_ptr.h" @@ -428,7 +429,7 @@ BrowserThread::GetTaskRunnerForThread(BrowserThread::UI)); } - std::string child_token_; + std::unique_ptr<mojo::edk::PendingProcessConnection> pending_connection_; std::unique_ptr<ChildConnection> child_connection_; int connection_filter_id_ =
diff --git a/content/common/child_process_host_impl.cc b/content/common/child_process_host_impl.cc index c64d2b7..082906f 100644 --- a/content/common/child_process_host_impl.cc +++ b/content/common/child_process_host_impl.cc
@@ -121,16 +121,13 @@ } std::string ChildProcessHostImpl::CreateChannelMojo( - const std::string& child_token) { + mojo::edk::PendingProcessConnection* connection) { DCHECK(channel_id_.empty()); - channel_id_ = mojo::edk::GenerateRandomToken(); - mojo::ScopedMessagePipeHandle host_handle = - mojo::edk::CreateParentMessagePipe(channel_id_, child_token); - channel_ = IPC::ChannelMojo::Create(std::move(host_handle), - IPC::Channel::MODE_SERVER, this); + channel_ = + IPC::ChannelMojo::Create(connection->CreateMessagePipe(&channel_id_), + IPC::Channel::MODE_SERVER, this); if (!channel_ || !InitChannel()) return std::string(); - return channel_id_; }
diff --git a/content/common/child_process_host_impl.h b/content/common/child_process_host_impl.h index 5a315ca..ebeb8aa 100644 --- a/content/common/child_process_host_impl.h +++ b/content/common/child_process_host_impl.h
@@ -64,7 +64,8 @@ // ChildProcessHost implementation bool Send(IPC::Message* message) override; void ForceShutdown() override; - std::string CreateChannelMojo(const std::string& child_token) override; + std::string CreateChannelMojo( + mojo::edk::PendingProcessConnection* connection) override; void CreateChannelMojo() override; bool IsChannelOpening() override; void AddFilter(IPC::MessageFilter* filter) override;
diff --git a/content/common/feature_policy/feature_policy.cc b/content/common/feature_policy/feature_policy.cc index a8204da..c4875a9c 100644 --- a/content/common/feature_policy/feature_policy.cc +++ b/content/common/feature_policy/feature_policy.cc
@@ -4,8 +4,70 @@ #include "content/common/feature_policy/feature_policy.h" +#include "base/macros.h" +#include "base/memory/ptr_util.h" +#include "base/stl_util.h" + namespace content { +namespace { + +// Given a string name, return the matching feature struct, or nullptr if it is +// not the name of a policy-controlled feature. +blink::WebFeaturePolicyFeature FeatureForName( + const std::string& feature_name, + const FeaturePolicy::FeatureList& features) { + for (const auto& feature_mapping : features) { + if (feature_name == feature_mapping.second->feature_name) + return feature_mapping.first; + } + return blink::WebFeaturePolicyFeature::NotFound; +} + +// Definitions of all features controlled by Feature Policy should appear here. +const FeaturePolicy::Feature kDocumentCookie{ + "cookie", FeaturePolicy::FeatureDefault::EnableForAll}; +const FeaturePolicy::Feature kDocumentDomain{ + "domain", FeaturePolicy::FeatureDefault::EnableForAll}; +const FeaturePolicy::Feature kDocumentWrite{ + "docwrite", FeaturePolicy::FeatureDefault::EnableForAll}; +const FeaturePolicy::Feature kFullscreenFeature{ + "fullscreen", FeaturePolicy::FeatureDefault::EnableForSelf}; +const FeaturePolicy::Feature kGeolocationFeature{ + "geolocation", FeaturePolicy::FeatureDefault::EnableForSelf}; +const FeaturePolicy::Feature kMidiFeature{ + "midi", FeaturePolicy::FeatureDefault::EnableForAll}; +const FeaturePolicy::Feature kNotificationsFeature{ + "notifications", FeaturePolicy::FeatureDefault::EnableForAll}; +const FeaturePolicy::Feature kPaymentFeature{ + "payment", FeaturePolicy::FeatureDefault::EnableForSelf}; +const FeaturePolicy::Feature kPushFeature{ + "push", FeaturePolicy::FeatureDefault::EnableForAll}; +const FeaturePolicy::Feature kSyncScript{ + "sync-script", FeaturePolicy::FeatureDefault::EnableForAll}; +const FeaturePolicy::Feature kSyncXHR{ + "sync-xhr", FeaturePolicy::FeatureDefault::EnableForAll}; +const FeaturePolicy::Feature kUsermedia{ + "usermedia", FeaturePolicy::FeatureDefault::EnableForAll}; +const FeaturePolicy::Feature kVibrateFeature{ + "vibrate", FeaturePolicy::FeatureDefault::EnableForSelf}; +const FeaturePolicy::Feature kWebRTC{ + "webrtc", FeaturePolicy::FeatureDefault::EnableForAll}; + +// Extracts a Whitelist from a ParsedFeaturePolicyDeclaration. +std::unique_ptr<FeaturePolicy::Whitelist> WhitelistFromDeclaration( + const ParsedFeaturePolicyDeclaration& parsed_declaration) { + std::unique_ptr<FeaturePolicy::Whitelist> result = + base::WrapUnique(new FeaturePolicy::Whitelist()); + if (parsed_declaration.matches_all_origins) + result->AddAll(); + for (const auto& origin : parsed_declaration.origins) + result->Add(origin); + return result; +} + +} // namespace + ParsedFeaturePolicyDeclaration::ParsedFeaturePolicyDeclaration() : matches_all_origins(false) {} @@ -22,4 +84,121 @@ ParsedFeaturePolicyDeclaration::~ParsedFeaturePolicyDeclaration() {} +FeaturePolicy::Whitelist::Whitelist() : matches_all_origins_(false) {} + +FeaturePolicy::Whitelist::~Whitelist() = default; + +void FeaturePolicy::Whitelist::Add(const url::Origin& origin) { + origins_.push_back(origin); +} + +void FeaturePolicy::Whitelist::AddAll() { + matches_all_origins_ = true; +} + +bool FeaturePolicy::Whitelist::Contains(const url::Origin& origin) const { + if (matches_all_origins_) + return true; + for (const auto& targetOrigin : origins_) { + if (targetOrigin.IsSameOriginWith(origin)) + return true; + } + return false; +} + +// static +std::unique_ptr<FeaturePolicy> FeaturePolicy::CreateFromParentPolicy( + const FeaturePolicy* parent_policy, + const url::Origin& origin) { + return CreateFromParentPolicy(parent_policy, origin, GetDefaultFeatureList()); +} + +bool FeaturePolicy::IsFeatureEnabledForOrigin( + blink::WebFeaturePolicyFeature feature, + const url::Origin& origin) const { + DCHECK(base::ContainsKey(feature_list_, feature)); + const FeaturePolicy::Feature* feature_definition = feature_list_.at(feature); + DCHECK(base::ContainsKey(inherited_policies_, feature)); + if (!inherited_policies_.at(feature)) + return false; + auto whitelist = whitelists_.find(feature); + if (whitelist != whitelists_.end()) + return whitelist->second->Contains(origin); + if (feature_definition->default_policy == + FeaturePolicy::FeatureDefault::EnableForAll) { + return true; + } + if (feature_definition->default_policy == + FeaturePolicy::FeatureDefault::EnableForSelf) { + return origin_.IsSameOriginWith(origin); + } + return false; +} + +bool FeaturePolicy::IsFeatureEnabled( + blink::WebFeaturePolicyFeature feature) const { + return IsFeatureEnabledForOrigin(feature, origin_); +} + +void FeaturePolicy::SetHeaderPolicy( + const ParsedFeaturePolicyHeader& parsed_header) { + DCHECK(whitelists_.empty()); + for (const ParsedFeaturePolicyDeclaration& parsed_declaration : + parsed_header) { + blink::WebFeaturePolicyFeature feature = + FeatureForName(parsed_declaration.feature_name, feature_list_); + if (feature == blink::WebFeaturePolicyFeature::NotFound) + continue; + whitelists_[feature] = WhitelistFromDeclaration(parsed_declaration); + } +} + +FeaturePolicy::FeaturePolicy(url::Origin origin, + const FeatureList& feature_list) + : origin_(origin), feature_list_(feature_list) {} + +FeaturePolicy::FeaturePolicy(url::Origin origin) + : origin_(origin), feature_list_(GetDefaultFeatureList()) {} + +FeaturePolicy::~FeaturePolicy() {} + +// static +std::unique_ptr<FeaturePolicy> FeaturePolicy::CreateFromParentPolicy( + const FeaturePolicy* parent_policy, + const url::Origin& origin, + const FeaturePolicy::FeatureList& features) { + std::unique_ptr<FeaturePolicy> new_policy = + base::WrapUnique(new FeaturePolicy(origin, features)); + for (const auto& feature : features) { + if (!parent_policy || + parent_policy->IsFeatureEnabledForOrigin(feature.first, origin)) { + new_policy->inherited_policies_[feature.first] = true; + } else { + new_policy->inherited_policies_[feature.first] = false; + } + } + return new_policy; +} + +// static +const FeaturePolicy::FeatureList& FeaturePolicy::GetDefaultFeatureList() { + CR_DEFINE_STATIC_LOCAL( + FeatureList, default_feature_list, + ({{blink::WebFeaturePolicyFeature::DocumentCookie, &kDocumentCookie}, + {blink::WebFeaturePolicyFeature::DocumentDomain, &kDocumentDomain}, + {blink::WebFeaturePolicyFeature::DocumentWrite, &kDocumentWrite}, + {blink::WebFeaturePolicyFeature::Fullscreen, &kFullscreenFeature}, + {blink::WebFeaturePolicyFeature::Geolocation, &kGeolocationFeature}, + {blink::WebFeaturePolicyFeature::MidiFeature, &kMidiFeature}, + {blink::WebFeaturePolicyFeature::Notifications, &kNotificationsFeature}, + {blink::WebFeaturePolicyFeature::Payment, &kPaymentFeature}, + {blink::WebFeaturePolicyFeature::Push, &kPushFeature}, + {blink::WebFeaturePolicyFeature::SyncScript, &kSyncScript}, + {blink::WebFeaturePolicyFeature::SyncXHR, &kSyncXHR}, + {blink::WebFeaturePolicyFeature::Usermedia, &kUsermedia}, + {blink::WebFeaturePolicyFeature::Vibrate, &kVibrateFeature}, + {blink::WebFeaturePolicyFeature::WebRTC, &kWebRTC}})); + return default_feature_list; +} + } // namespace content
diff --git a/content/common/feature_policy/feature_policy.h b/content/common/feature_policy/feature_policy.h index b49e1a4..44f9e11f 100644 --- a/content/common/feature_policy/feature_policy.h +++ b/content/common/feature_policy/feature_policy.h
@@ -5,14 +5,77 @@ #ifndef CONTENT_COMMON_FEATURE_POLICY_FEATURE_POLICY_H_ #define CONTENT_COMMON_FEATURE_POLICY_FEATURE_POLICY_H_ +#include <map> +#include <memory> #include <string> #include <vector> +#include "base/macros.h" #include "content/common/content_export.h" +#include "third_party/WebKit/public/platform/WebFeaturePolicy.h" #include "url/origin.h" namespace content { +// Feature Policy is a mechanism for controlling the availability of web +// platform features in a frame, including all embedded frames. It can be used +// to remove features, automatically refuse API permission requests, or modify +// the behaviour of features. (The specific changes which are made depend on the +// feature; see the specification for details). +// +// Policies can be defined in the HTTP header stream, with the |Feature-Policy| +// HTTP header, or can be set by the |allow| attributes on the iframe element +// which embeds the document. +// +// See https://wicg.github.io/FeaturePolicy/ +// +// Key concepts: +// +// Features +// -------- +// Features which can be controlled by policy are defined by instances of the +// FeaturePolicy::Feature struct. The features are referenced by the +// |WebFeaturePolicyFeature| enum, declared in |WebFeaturePolicy.h|. +// +// Whitelists +// ---------- +// Whitelists are collections of origins, although two special terms can be used +// when declaring them: +// "self" refers to the orgin of the frame which is declaring the policy. +// "*" refers to all origins; any origin will match a whitelist which contains +// it. +// +// Declarations +// ------------ +// A feature policy declaration is a mapping of a feature name to a whitelist. +// A set of declarations is a declared policy. +// +// Inherited Policy +// ---------------- +// In addition to the declared policy (which may be empty), every frame has +// an inherited policy, which is determined by the context in which it is +// embedded, or by the defaults for each feature in the case of the top-level +// document. +// +// Defaults +// -------- +// Each defined feature has a default policy, which determines whether the +// feature is available when no policy has been declared, ans determines how the +// feature is inherited across origin boundaries. +// +// If the default policy is in effect for a frame, then it controls how the +// feature is inherited by any cross-origin iframes embedded by the frame. (See +// the comments below in FeaturePolicy::DefaultPolicy for specifics) +// +// Policy Inheritance +// ------------------ +// Policies in effect for a frame are inherited by any child frames it embeds. +// Unless another policy is declared in the child, all same-origin children will +// receive the same set of enables features as the parent frame. Whether or not +// features are inherited by cross-origin iframes without an explicit policy is +// determined by the feature's default policy. (Again, see the comments in +// FeaturePolicy::DefaultPolicy for details) + // This struct holds feature policy whitelist data that needs to be replicated // between a RenderFrame and any of its associated RenderFrameProxies. A list of // these form a ParsedFeaturePolicyHeader. @@ -33,6 +96,114 @@ using ParsedFeaturePolicyHeader = std::vector<ParsedFeaturePolicyDeclaration>; +class CONTENT_EXPORT FeaturePolicy { + public: + // Represents a collection of origins which make up a whitelist in a feature + // policy. This collection may be set to match every origin (corresponding to + // the "*" syntax in the policy string, in which case the Contains() method + // will always return true. + class Whitelist final { + public: + Whitelist(); + ~Whitelist(); + + // Adds a single origin to the whitelist. + void Add(const url::Origin& origin); + + // Adds all origins to the whitelist. + void AddAll(); + + // Returns true if the given origin has been added to the whitelist. + bool Contains(const url::Origin& origin) const; + + private: + bool matches_all_origins_; + std::vector<url::Origin> origins_; + }; + + // The FeaturePolicy::FeatureDefault enum defines the default enable state for + // a feature when neither it nor any parent frame have declared an explicit + // policy. The three possibilities map directly to Feature Policy Whitelist + // semantics. + enum class FeatureDefault { + // Equivalent to []. If this default policy is in effect for a frame, then + // the feature will not be enabled for that frame or any of its children. + DisableForAll, + + // Equivalent to ["self"]. If this default policy is in effect for a frame, + // then the feature will be enabled for that frame, and any same-origin + // child frames, but not for any cross-origin child frames. + EnableForSelf, + + // Equivalent to ["*"]. If in effect for a frame, then the feature is + // enabled for that frame and all of its children. + EnableForAll + }; + + // The FeaturePolicy::Feature struct is used to define all features under + // control of Feature Policy. There should only be one instance of this struct + // for any given feature (declared below). + struct Feature { + // The name of the feature, as it should appear in a policy string + const char* const feature_name; + + // Controls whether the feature should be available in the platform by + // default, in the absence of any declared policy. + FeatureDefault default_policy; + }; + + using FeatureList = + std::map<blink::WebFeaturePolicyFeature, const FeaturePolicy::Feature*>; + + ~FeaturePolicy(); + + static std::unique_ptr<FeaturePolicy> CreateFromParentPolicy( + const FeaturePolicy* parent_policy, + const url::Origin& origin); + + // Returns whether or not the given feature is enabled by this policy. + bool IsFeatureEnabledForOrigin(blink::WebFeaturePolicyFeature feature, + const url::Origin& origin) const; + + // Returns whether or not the given feature is enabled for the origin of the + // document that owns the policy. + bool IsFeatureEnabled(blink::WebFeaturePolicyFeature feature) const; + + // Sets the declared policy from the parsed Feature-Policy HTTP header. + // Unrecognized features will be ignored. + void SetHeaderPolicy(const ParsedFeaturePolicyHeader& parsed_header); + + private: + friend class FeaturePolicyTest; + + explicit FeaturePolicy(url::Origin origin); + FeaturePolicy(url::Origin origin, const FeatureList& feature_list); + static std::unique_ptr<FeaturePolicy> CreateFromParentPolicy( + const FeaturePolicy* parent_policy, + const url::Origin& origin, + const FeatureList& features); + + // Returns the list of features which can be controlled by Feature Policy. + static const FeatureList& GetDefaultFeatureList(); + + url::Origin origin_; + + // Map of feature names to declared whitelists. Any feature which is missing + // from this map should use the inherited policy. + std::map<blink::WebFeaturePolicyFeature, std::unique_ptr<Whitelist>> + whitelists_; + + // Records whether or not each feature was enabled for this frame by its + // parent frame. + // TODO(iclelland): Generate, instead of this map, a set of bool flags, one + // for each feature, as all features are supposed to be represented here. + std::map<blink::WebFeaturePolicyFeature, bool> inherited_policies_; + + const FeatureList& feature_list_; + + DISALLOW_COPY_AND_ASSIGN(FeaturePolicy); +}; + } // namespace content #endif // CONTENT_COMMON_FEATURE_POLICY_FEATURE_POLICY_H_
diff --git a/content/common/feature_policy/feature_policy_unittest.cc b/content/common/feature_policy/feature_policy_unittest.cc new file mode 100644 index 0000000..8426bd0 --- /dev/null +++ b/content/common/feature_policy/feature_policy_unittest.cc
@@ -0,0 +1,644 @@ +// Copyright 2016 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 "content/common/feature_policy/feature_policy.h" + +#include "testing/gtest/include/gtest/gtest.h" +#include "url/gurl.h" + +namespace content { + +namespace { + +// This is an example of a feature which should be enabled by default in all +// frames. +const FeaturePolicy::Feature kDefaultOnFeatureDfn{ + "default-on", FeaturePolicy::FeatureDefault::EnableForAll}; + +// This is an example of a feature which should be enabled in top-level frames, +// and same-origin child-frames, but must be delegated to all cross-origin +// frames explicitly. +const FeaturePolicy::Feature kDefaultSelfFeatureDfn{ + "default-self", FeaturePolicy::FeatureDefault::EnableForSelf}; + +// This is an example of a feature which should be disabled by default, both in +// top-level and nested frames. +const FeaturePolicy::Feature kDefaultOffFeatureDfn{ + "default-off", FeaturePolicy::FeatureDefault::DisableForAll}; + +// Define the three new features for testing +blink::WebFeaturePolicyFeature kDefaultOnFeature = + static_cast<blink::WebFeaturePolicyFeature>( + static_cast<int>(blink::WebFeaturePolicyFeature::LAST_FEATURE) + 1); + +blink::WebFeaturePolicyFeature kDefaultSelfFeature = + static_cast<blink::WebFeaturePolicyFeature>( + static_cast<int>(blink::WebFeaturePolicyFeature::LAST_FEATURE) + 2); + +blink::WebFeaturePolicyFeature kDefaultOffFeature = + static_cast<blink::WebFeaturePolicyFeature>( + static_cast<int>(blink::WebFeaturePolicyFeature::LAST_FEATURE) + 3); + +} // namespace + +class FeaturePolicyTest : public ::testing::Test { + protected: + FeaturePolicyTest() + : feature_list_({{kDefaultOnFeature, &kDefaultOnFeatureDfn}, + {kDefaultSelfFeature, &kDefaultSelfFeatureDfn}, + {kDefaultOffFeature, &kDefaultOffFeatureDfn}}) {} + + ~FeaturePolicyTest() override {} + + std::unique_ptr<FeaturePolicy> CreateFromParentPolicy( + const FeaturePolicy* parent, + const url::Origin& origin) { + return FeaturePolicy::CreateFromParentPolicy(parent, origin, feature_list_); + } + + url::Origin origin_a_ = url::Origin(GURL("https://example.com/")); + url::Origin origin_b_ = url::Origin(GURL("https://example.net/")); + url::Origin origin_c_ = url::Origin(GURL("https://example.org/")); + + private: + // Contains the list of controlled features, so that we are guaranteed to + // have at least one of each kind of default behaviour represented. + FeaturePolicy::FeatureList feature_list_; +}; + +TEST_F(FeaturePolicyTest, TestInitialPolicy) { + // +-------------+ + // |(1)Origin A | + // |No Policy | + // +-------------+ + // Default-on and top-level-only features should be enabled in top-level + // frame. Default-off features should be disabled. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + EXPECT_TRUE(policy1->IsFeatureEnabled(kDefaultOnFeature)); + EXPECT_TRUE(policy1->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_FALSE(policy1->IsFeatureEnabled(kDefaultOffFeature)); +} + +TEST_F(FeaturePolicyTest, TestInitialSameOriginChildPolicy) { + // +-----------------+ + // |(1)Origin A | + // |No Policy | + // | +-------------+ | + // | |(2)Origin A | | + // | |No Policy | | + // | +-------------+ | + // +-----------------+ + // Default-on and Default-self features should be enabled in a same-origin + // child frame. Default-off features should be disabled. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_a_); + EXPECT_TRUE(policy2->IsFeatureEnabled(kDefaultOnFeature)); + EXPECT_TRUE(policy2->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_FALSE(policy2->IsFeatureEnabled(kDefaultOffFeature)); +} + +TEST_F(FeaturePolicyTest, TestInitialCrossOriginChildPolicy) { + // +-----------------+ + // |(1)Origin A | + // |No Policy | + // | +-------------+ | + // | |(2)Origin B | | + // | |No Policy | | + // | +-------------+ | + // +-----------------+ + // Default-on features should be enabled in child frame. Default-self and + // Default-off features should be disabled. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_b_); + EXPECT_TRUE(policy2->IsFeatureEnabled(kDefaultOnFeature)); + EXPECT_FALSE(policy2->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_FALSE(policy2->IsFeatureEnabled(kDefaultOffFeature)); +} + +TEST_F(FeaturePolicyTest, TestCrossOriginChildCannotEnableFeature) { + // +---------------------------------------+ + // |(1) Origin A | + // |No Policy | + // | +-----------------------------------+ | + // | |(2) Origin B | | + // | |Policy: {"default-self": ["self"]} | | + // | +-----------------------------------+ | + // +---------------------------------------+ + // Default-self feature should be disabled in cross origin frame, even if no + // policy was specified in the parent frame. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_b_); + policy2->SetHeaderPolicy({{{"default-self", false, {origin_b_}}}}); + EXPECT_FALSE(policy2->IsFeatureEnabled(kDefaultSelfFeature)); +} + +TEST_F(FeaturePolicyTest, TestFrameSelfInheritance) { + // +------------------------------------------+ + // |(1) Origin A | + // |Policy: {"default-self": ["self"]} | + // | +-----------------+ +-----------------+ | + // | |(2) Origin A | |(4) Origin B | | + // | |No Policy | |No Policy | | + // | | +-------------+ | | +-------------+ | | + // | | |(3)Origin A | | | |(5)Origin B | | | + // | | |No Policy | | | |No Policy | | | + // | | +-------------+ | | +-------------+ | | + // | +-----------------+ +-----------------+ | + // +------------------------------------------+ + // Feature should be enabled at the top-level, and through the chain of + // same-origin frames 2 and 3. It should be disabled in frames 4 and 5, as + // they are at a different origin. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + policy1->SetHeaderPolicy({{{"default-self", false, {origin_a_}}}}); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_a_); + std::unique_ptr<FeaturePolicy> policy3 = + CreateFromParentPolicy(policy2.get(), origin_a_); + std::unique_ptr<FeaturePolicy> policy4 = + CreateFromParentPolicy(policy1.get(), origin_b_); + std::unique_ptr<FeaturePolicy> policy5 = + CreateFromParentPolicy(policy4.get(), origin_b_); + EXPECT_TRUE(policy2->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_TRUE(policy3->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_FALSE(policy4->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_FALSE(policy5->IsFeatureEnabled(kDefaultSelfFeature)); +} + +TEST_F(FeaturePolicyTest, TestReflexiveFrameSelfInheritance) { + // +-----------------------------------+ + // |(1) Origin A | + // |Policy: {"default-self": ["self"]} | + // | +-----------------+ | + // | |(2) Origin B | | + // | |No Policy | | + // | | +-------------+ | | + // | | |(3)Origin A | | | + // | | |No Policy | | | + // | | +-------------+ | | + // | +-----------------+ | + // +-----------------------------------+ + // Feature which is enabled at top-level should be disabled in frame 3, as + // it is embedded by frame 2, for which the feature is not enabled. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + policy1->SetHeaderPolicy({{{"default-self", false, {origin_a_}}}}); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_b_); + std::unique_ptr<FeaturePolicy> policy3 = + CreateFromParentPolicy(policy2.get(), origin_a_); + EXPECT_FALSE(policy2->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_FALSE(policy3->IsFeatureEnabled(kDefaultSelfFeature)); +} + +TEST_F(FeaturePolicyTest, TestSelectiveFrameInheritance) { + // +------------------------------------------+ + // |(1) Origin A | + // |Policy: {"default-self": ["Origin B"]} | + // | +-----------------+ +-----------------+ | + // | |(2) Origin B | |(3) Origin C | | + // | |No Policy | |No Policy | | + // | | | | +-------------+ | | + // | | | | |(4)Origin B | | | + // | | | | |No Policy | | | + // | | | | +-------------+ | | + // | +-----------------+ +-----------------+ | + // +------------------------------------------+ + // Feature should be enabled in second level Origin B frame, but disabled in + // Frame 4, because it is embedded by frame 3, where the feature is not + // enabled. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + policy1->SetHeaderPolicy({{{"default-self", false, {origin_b_}}}}); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_b_); + std::unique_ptr<FeaturePolicy> policy3 = + CreateFromParentPolicy(policy1.get(), origin_c_); + std::unique_ptr<FeaturePolicy> policy4 = + CreateFromParentPolicy(policy3.get(), origin_b_); + EXPECT_TRUE(policy2->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_FALSE(policy3->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_FALSE(policy4->IsFeatureEnabled(kDefaultSelfFeature)); +} + +TEST_F(FeaturePolicyTest, TestPolicyCanBlockSelf) { + // +----------------------------+ + // |(1)Origin A | + // |Policy: {"default-on": []} | + // +----------------------------+ + // Default-on feature should be disabled in top-level frame. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + policy1->SetHeaderPolicy( + {{{"default-on", false, std::vector<url::Origin>()}}}); + EXPECT_FALSE(policy1->IsFeatureEnabled(kDefaultOnFeature)); +} + +TEST_F(FeaturePolicyTest, TestParentPolicyBlocksSameOriginChildPolicy) { + // +----------------------------+ + // |(1)Origin A | + // |Policy: {"default-on": []} | + // | +-------------+ | + // | |(2)Origin A | | + // | |No Policy | | + // | +-------------+ | + // +----------------------------+ + // Feature should be disabled in child frame. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + policy1->SetHeaderPolicy( + {{{"default-on", false, std::vector<url::Origin>()}}}); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_a_); + EXPECT_FALSE(policy2->IsFeatureEnabled(kDefaultOnFeature)); +} + +TEST_F(FeaturePolicyTest, TestChildPolicyCanBlockSelf) { + // +--------------------------------+ + // |(1)Origin A | + // |No Policy | + // | +----------------------------+ | + // | |(2)Origin B | | + // | |Policy: {"default-on": []} | | + // | +----------------------------+ | + // +--------------------------------+ + // Default-on feature should be disabled by cross-origin child frame. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_b_); + policy2->SetHeaderPolicy( + {{{"default-on", false, std::vector<url::Origin>()}}}); + EXPECT_FALSE(policy2->IsFeatureEnabled(kDefaultOnFeature)); +} + +TEST_F(FeaturePolicyTest, TestChildPolicyCanBlockChildren) { + // +--------------------------------------+ + // |(1)Origin A | + // |No Policy | + // | +----------------------------------+ | + // | |(2)Origin B | | + // | |Policy: {"default-on": ["self"]} | | + // | | +-------------+ | | + // | | |(3)Origin C | | | + // | | |No Policy | | | + // | | +-------------+ | | + // | +----------------------------------+ | + // +--------------------------------------+ + // Default-on feature should be enabled in frames 1 and 2; disabled in frame + // 3 by child frame policy. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_b_); + policy2->SetHeaderPolicy({{{"default-on", false, {origin_b_}}}}); + std::unique_ptr<FeaturePolicy> policy3 = + CreateFromParentPolicy(policy2.get(), origin_c_); + EXPECT_TRUE(policy2->IsFeatureEnabled(kDefaultOnFeature)); + EXPECT_FALSE(policy3->IsFeatureEnabled(kDefaultOnFeature)); +} + +TEST_F(FeaturePolicyTest, TestParentPolicyBlocksCrossOriginChildPolicy) { + // +----------------------------+ + // |(1)Origin A | + // |Policy: {"default-on": []} | + // | +-------------+ | + // | |(2)Origin B | | + // | |No Policy | | + // | +-------------+ | + // +----------------------------+ + // Default-on feature should be disabled in cross-origin child frame. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + policy1->SetHeaderPolicy( + {{{"default-on", false, std::vector<url::Origin>()}}}); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_b_); + EXPECT_FALSE(policy2->IsFeatureEnabled(kDefaultOnFeature)); +} + +TEST_F(FeaturePolicyTest, TestEnableForAllOrigins) { + // +--------------------------------+ + // |(1) Origin A | + // |Policy: {"default-self": ["*"]} | + // | +-----------------+ | + // | |(2) Origin B | | + // | |No Policy | | + // | | +-------------+ | | + // | | |(3)Origin A | | | + // | | |No Policy | | | + // | | +-------------+ | | + // | +-----------------+ | + // +--------------------------------+ + // Feature should be enabled in top and second level; disabled in frame 3. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + policy1->SetHeaderPolicy( + {{{"default-self", true, std::vector<url::Origin>()}}}); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_b_); + std::unique_ptr<FeaturePolicy> policy3 = + CreateFromParentPolicy(policy2.get(), origin_a_); + EXPECT_TRUE(policy1->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_TRUE(policy2->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_FALSE(policy3->IsFeatureEnabled(kDefaultSelfFeature)); +} + +TEST_F(FeaturePolicyTest, TestDefaultOnEnablesForAllAncestors) { + // +---------------------------------------+ + // |(1) Origin A | + // |Policy: {"default-on": ["Origin B"]} | + // | +-----------------------------------+ | + // | |(2) Origin B | | + // | |No Policy | | + // | | +-------------+ +-------------+ | | + // | | |(3)Origin B | |(4)Origin C | | | + // | | |No Policy | |No Policy | | | + // | | +-------------+ +-------------+ | | + // | +-----------------------------------+ | + // +---------------------------------------+ + // Feature should be disabled in frame 1; enabled in frames 2, 3 and 4. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + policy1->SetHeaderPolicy({{{"default-on", false, {origin_b_}}}}); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_b_); + std::unique_ptr<FeaturePolicy> policy3 = + CreateFromParentPolicy(policy2.get(), origin_b_); + std::unique_ptr<FeaturePolicy> policy4 = + CreateFromParentPolicy(policy2.get(), origin_c_); + EXPECT_FALSE(policy1->IsFeatureEnabled(kDefaultOnFeature)); + EXPECT_TRUE(policy2->IsFeatureEnabled(kDefaultOnFeature)); + EXPECT_TRUE(policy3->IsFeatureEnabled(kDefaultOnFeature)); + EXPECT_TRUE(policy4->IsFeatureEnabled(kDefaultOnFeature)); +} + +TEST_F(FeaturePolicyTest, TestDefaultSelfRespectsSameOriginEmbedding) { + // +---------------------------------------+ + // |(1) Origin A | + // |Policy: {"default-self": ["Origin B"]} | + // | +-----------------------------------+ | + // | |(2) Origin B | | + // | |No Policy | | + // | | +-------------+ +-------------+ | | + // | | |(3)Origin B | |(4)Origin C | | | + // | | |No Policy | |No Policy | | | + // | | +-------------+ +-------------+ | | + // | +-----------------------------------+ | + // +---------------------------------------+ + // Feature should be disabled in frames 1 and 4; enabled in frames 2 and 3. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + policy1->SetHeaderPolicy({{{"default-self", false, {origin_b_}}}}); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_b_); + std::unique_ptr<FeaturePolicy> policy3 = + CreateFromParentPolicy(policy2.get(), origin_b_); + std::unique_ptr<FeaturePolicy> policy4 = + CreateFromParentPolicy(policy2.get(), origin_c_); + EXPECT_FALSE(policy1->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_TRUE(policy2->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_TRUE(policy3->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_FALSE(policy4->IsFeatureEnabled(kDefaultSelfFeature)); +} + +TEST_F(FeaturePolicyTest, TestDefaultOffMustBeDelegatedToAllCrossOriginFrames) { + // +------------------------------------------------------------+ + // |(1) Origin A | + // |Policy: {"default-off": ["Origin B"]} | + // | +--------------------------------------------------------+ | + // | |(2) Origin B | | + // | |Policy: {"default-off": ["self"]} | | + // | | +-------------+ +----------------------------------+ | | + // | | |(3)Origin B | |(4)Origin C | | | + // | | |No Policy | |Policy: {"default-off": ["self"]} | | | + // | | +-------------+ +----------------------------------+ | | + // | +--------------------------------------------------------+ | + // +------------------------------------------------------------+ + // Feature should be disabled in frames 1, 3 and 4; enabled in frame 2 only. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + policy1->SetHeaderPolicy({{{"default-off", false, {origin_b_}}}}); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_b_); + policy2->SetHeaderPolicy({{{"default-off", false, {origin_b_}}}}); + std::unique_ptr<FeaturePolicy> policy3 = + CreateFromParentPolicy(policy2.get(), origin_b_); + std::unique_ptr<FeaturePolicy> policy4 = + CreateFromParentPolicy(policy2.get(), origin_c_); + policy4->SetHeaderPolicy({{{"default-off", false, {origin_c_}}}}); + EXPECT_FALSE(policy1->IsFeatureEnabled(kDefaultOffFeature)); + EXPECT_TRUE(policy2->IsFeatureEnabled(kDefaultOffFeature)); + EXPECT_FALSE(policy3->IsFeatureEnabled(kDefaultOffFeature)); + EXPECT_FALSE(policy4->IsFeatureEnabled(kDefaultOffFeature)); +} + +TEST_F(FeaturePolicyTest, TestReenableForAllOrigins) { + // +------------------------------------+ + // |(1) Origin A | + // |Policy: {"default-self": ["*"]} | + // | +--------------------------------+ | + // | |(2) Origin B | | + // | |Policy: {"default-self": ["*"]} | | + // | | +-------------+ | | + // | | |(3)Origin A | | | + // | | |No Policy | | | + // | | +-------------+ | | + // | +--------------------------------+ | + // +------------------------------------+ + // Feature should be enabled in all frames. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + policy1->SetHeaderPolicy( + {{{"default-self", true, std::vector<url::Origin>()}}}); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_b_); + policy2->SetHeaderPolicy( + {{{"default-self", true, std::vector<url::Origin>()}}}); + std::unique_ptr<FeaturePolicy> policy3 = + CreateFromParentPolicy(policy2.get(), origin_a_); + EXPECT_TRUE(policy1->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_TRUE(policy2->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_TRUE(policy3->IsFeatureEnabled(kDefaultSelfFeature)); +} + +TEST_F(FeaturePolicyTest, TestBlockedFrameCannotReenable) { + // +--------------------------------------+ + // |(1)Origin A | + // |Policy: {"default-self": ["self"]} | + // | +----------------------------------+ | + // | |(2)Origin B | | + // | |Policy: {"default-self": ["*"]} | | + // | | +-------------+ +-------------+ | | + // | | |(3)Origin A | |(4)Origin C | | | + // | | |No Policy | |No Policy | | | + // | | +-------------+ +-------------+ | | + // | +----------------------------------+ | + // +--------------------------------------+ + // Feature should be enabled at the top level; disabled in all other frames. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + policy1->SetHeaderPolicy({{{"default-self", false, {origin_a_}}}}); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_b_); + policy2->SetHeaderPolicy( + {{{"default-self", true, std::vector<url::Origin>()}}}); + std::unique_ptr<FeaturePolicy> policy3 = + CreateFromParentPolicy(policy2.get(), origin_a_); + std::unique_ptr<FeaturePolicy> policy4 = + CreateFromParentPolicy(policy2.get(), origin_c_); + EXPECT_TRUE(policy1->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_FALSE(policy2->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_FALSE(policy3->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_FALSE(policy4->IsFeatureEnabled(kDefaultSelfFeature)); +} + +TEST_F(FeaturePolicyTest, TestEnabledFrameCanDelegate) { + // +---------------------------------------------------+ + // |(1) Origin A | + // |Policy: {"default-self": ["self", "Origin B"]} | + // | +-----------------------------------------------+ | + // | |(2) Origin B | | + // | |Policy: {"default-self": ["self", "Origin C"]} | | + // | | +-------------+ | | + // | | |(3)Origin C | | | + // | | |No Policy | | | + // | | +-------------+ | | + // | +-----------------------------------------------+ | + // +---------------------------------------------------+ + // Feature should be enabled in all frames. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + policy1->SetHeaderPolicy({{{"default-self", false, {origin_a_, origin_b_}}}}); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_b_); + policy2->SetHeaderPolicy({{{"default-self", false, {origin_b_, origin_c_}}}}); + std::unique_ptr<FeaturePolicy> policy3 = + CreateFromParentPolicy(policy2.get(), origin_c_); + EXPECT_TRUE(policy1->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_TRUE(policy2->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_TRUE(policy3->IsFeatureEnabled(kDefaultSelfFeature)); +} + +TEST_F(FeaturePolicyTest, TestEnabledFrameCanDelegateByDefault) { + // +-----------------------------------------------+ + // |(1) Origin A | + // |Policy: {"default-on": ["self", "Origin B"]} | + // | +--------------------+ +--------------------+ | + // | |(2) Origin B | | (4) Origin C | | + // | |No Policy | | No Policy | | + // | | +-------------+ | | | | + // | | |(3)Origin C | | | | | + // | | |No Policy | | | | | + // | | +-------------+ | | | | + // | +--------------------+ +--------------------+ | + // +-----------------------------------------------+ + // Feature should be enabled in frames 1, 2, and 3, and disabled in frame 4. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + policy1->SetHeaderPolicy({{{"default-on", false, {origin_a_, origin_b_}}}}); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_b_); + std::unique_ptr<FeaturePolicy> policy3 = + CreateFromParentPolicy(policy2.get(), origin_c_); + std::unique_ptr<FeaturePolicy> policy4 = + CreateFromParentPolicy(policy1.get(), origin_c_); + EXPECT_TRUE(policy1->IsFeatureEnabled(kDefaultOnFeature)); + EXPECT_TRUE(policy2->IsFeatureEnabled(kDefaultOnFeature)); + EXPECT_TRUE(policy3->IsFeatureEnabled(kDefaultOnFeature)); + EXPECT_FALSE(policy4->IsFeatureEnabled(kDefaultOnFeature)); +} + +TEST_F(FeaturePolicyTest, TestNonNestedFeaturesDontDelegateByDefault) { + // +-----------------------------------------------+ + // |(1) Origin A | + // |Policy: {"default-self": ["self", "Origin B"]} | + // | +--------------------+ +--------------------+ | + // | |(2) Origin B | | (4) Origin C | | + // | |No Policy | | No Policy | | + // | | +-------------+ | | | | + // | | |(3)Origin C | | | | | + // | | |No Policy | | | | | + // | | +-------------+ | | | | + // | +--------------------+ +--------------------+ | + // +-----------------------------------------------+ + // Feature should be enabled in frames 1 and 2, and disabled in frames 3 and + // 4. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + policy1->SetHeaderPolicy({{{"default-self", false, {origin_a_, origin_b_}}}}); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_b_); + std::unique_ptr<FeaturePolicy> policy3 = + CreateFromParentPolicy(policy2.get(), origin_c_); + std::unique_ptr<FeaturePolicy> policy4 = + CreateFromParentPolicy(policy1.get(), origin_c_); + EXPECT_TRUE(policy1->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_TRUE(policy2->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_FALSE(policy3->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_FALSE(policy4->IsFeatureEnabled(kDefaultSelfFeature)); +} + +TEST_F(FeaturePolicyTest, TestFeaturesAreIndependent) { + // +-----------------------------------------------+ + // |(1) Origin A | + // |Policy: {"default-self": ["self", "Origin B"], | + // | "default-on": ["self"]} | + // | +-------------------------------------------+ | + // | |(2) Origin B | | + // | |Policy: {"default-self": ["*"], | | + // | | "default-on": ["*"]} | | + // | | +-------------+ | | + // | | |(3)Origin C | | | + // | | |No Policy | | | + // | | +-------------+ | | + // | +-------------------------------------------+ | + // +-----------------------------------------------+ + // Default-self feature should be enabled in all frames; Default-on feature + // should be enabled in frame 1, and disabled in frames 2 and 3. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + policy1->SetHeaderPolicy({{{"default-self", false, {origin_a_, origin_b_}}, + {"default-on", false, {origin_a_}}}}); + std::unique_ptr<FeaturePolicy> policy2 = + CreateFromParentPolicy(policy1.get(), origin_b_); + policy2->SetHeaderPolicy( + {{{"default-self", true, std::vector<url::Origin>()}, + {"default-on", true, std::vector<url::Origin>()}}}); + std::unique_ptr<FeaturePolicy> policy3 = + CreateFromParentPolicy(policy2.get(), origin_c_); + EXPECT_TRUE(policy1->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_TRUE(policy1->IsFeatureEnabled(kDefaultOnFeature)); + EXPECT_TRUE(policy2->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_FALSE(policy2->IsFeatureEnabled(kDefaultOnFeature)); + EXPECT_TRUE(policy3->IsFeatureEnabled(kDefaultSelfFeature)); + EXPECT_FALSE(policy3->IsFeatureEnabled(kDefaultOnFeature)); +} + +TEST_F(FeaturePolicyTest, TestFeatureEnabledForOrigin) { + // +-----------------------------------------------+ + // |(1) Origin A | + // |Policy: {"default-off": ["self", "Origin B"]} | + // +-----------------------------------------------+ + // Features should be enabled by the policy in frame 1 for origins A and B, + // and disabled for origin C. + std::unique_ptr<FeaturePolicy> policy1 = + CreateFromParentPolicy(nullptr, origin_a_); + policy1->SetHeaderPolicy({{{"default-off", false, {origin_a_, origin_b_}}}}); + EXPECT_TRUE( + policy1->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_a_)); + EXPECT_TRUE( + policy1->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_b_)); + EXPECT_FALSE( + policy1->IsFeatureEnabledForOrigin(kDefaultOffFeature, origin_c_)); +} + +} // namespace content
diff --git a/content/common/service_manager/child_connection.cc b/content/common/service_manager/child_connection.cc index 58cca53..42faac05 100644 --- a/content/common/service_manager/child_connection.cc +++ b/content/common/service_manager/child_connection.cc
@@ -123,20 +123,16 @@ ChildConnection::ChildConnection( const std::string& service_name, const std::string& instance_id, - const std::string& child_token, + mojo::edk::PendingProcessConnection* process_connection, service_manager::Connector* connector, scoped_refptr<base::SequencedTaskRunner> io_task_runner) - : child_token_(child_token), - context_(new IOThreadContext), + : context_(new IOThreadContext), child_identity_(service_name, service_manager::mojom::kInheritUserID, instance_id), - service_token_(mojo::edk::GenerateRandomToken()), weak_factory_(this) { - mojo::ScopedMessagePipeHandle service_pipe = - mojo::edk::CreateParentMessagePipe(service_token_, child_token_); - - context_->Initialize(child_identity_, connector, std::move(service_pipe), + context_->Initialize(child_identity_, connector, + process_connection->CreateMessagePipe(&service_token_), io_task_runner); remote_interfaces_.Forward( base::Bind(&CallBinderOnTaskRunner, @@ -146,14 +142,6 @@ ChildConnection::~ChildConnection() { context_->ShutDown(); - - if (process_handle_ == base::kNullProcessHandle) { - // The process handle was never set, so we have to assume the process was - // not successfully launched. Note that ChildProcessLauncher may also call - // call ChildProcessLaunchFailed for the same token, so this is (harmlessly) - // redundant in some cases. - mojo::edk::ChildProcessLaunchFailed(child_token_); - } } void ChildConnection::SetProcessHandle(base::ProcessHandle handle) {
diff --git a/content/common/service_manager/child_connection.h b/content/common/service_manager/child_connection.h index 1e34ac0..01ece56 100644 --- a/content/common/service_manager/child_connection.h +++ b/content/common/service_manager/child_connection.h
@@ -14,6 +14,7 @@ #include "base/process/process_handle.h" #include "base/sequenced_task_runner.h" #include "content/common/content_export.h" +#include "mojo/edk/embedder/pending_process_connection.h" #include "services/service_manager/public/cpp/identity.h" #include "services/service_manager/public/cpp/interface_provider.h" #include "services/service_manager/public/interfaces/connector.mojom.h" @@ -35,7 +36,7 @@ // connector to use to establish the connection. ChildConnection(const std::string& name, const std::string& instance_id, - const std::string& child_token, + mojo::edk::PendingProcessConnection* process_connection, service_manager::Connector* connector, scoped_refptr<base::SequencedTaskRunner> io_task_runner); ~ChildConnection(); @@ -61,10 +62,9 @@ private: class IOThreadContext; - const std::string child_token_; scoped_refptr<IOThreadContext> context_; service_manager::Identity child_identity_; - const std::string service_token_; + std::string service_token_; base::ProcessHandle process_handle_ = base::kNullProcessHandle; service_manager::InterfaceProvider remote_interfaces_;
diff --git a/content/common/service_manager/service_manager_connection_impl.cc b/content/common/service_manager/service_manager_connection_impl.cc index 4e511907..26f75d97 100644 --- a/content/common/service_manager/service_manager_connection_impl.cc +++ b/content/common/service_manager/service_manager_connection_impl.cc
@@ -213,11 +213,10 @@ void RemoveConnectionFilterOnIOThread(int filter_id) { base::AutoLock lock(lock_); auto it = connection_filters_.find(filter_id); - // TODO(crbug.com/687247): This DCHECK is hit when the browser is shut down - // by the service manager (e.g. in response to an ash crash under mash). - // Figure out why. - DCHECK(it != connection_filters_.end()); - connection_filters_.erase(it); + // During shutdown the connection filters might have been cleared already + // by ClearConnectionFiltersOnIOThread() above, so this id might not exist. + if (it != connection_filters_.end()) + connection_filters_.erase(it); } void OnBrowserConnectionLost() {
diff --git a/content/common/site_isolation_policy.cc b/content/common/site_isolation_policy.cc index a1607c84..b3db97e 100644 --- a/content/common/site_isolation_policy.cc +++ b/content/common/site_isolation_policy.cc
@@ -5,13 +5,26 @@ #include "content/common/site_isolation_policy.h" #include "base/command_line.h" +#include "base/feature_list.h" +#include "content/public/common/content_client.h" +#include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" namespace content { // static bool SiteIsolationPolicy::AreCrossProcessFramesPossible() { +// Before turning this on for Android, input event routing needs to be +// completed there, and perf regressions in https://crbug.com/690229 need to be +// investigated. +#if defined(OS_ANDROID) + return UseDedicatedProcessesForAllSites() || + IsTopDocumentIsolationEnabled() || + GetContentClient()->IsSupplementarySiteIsolationModeEnabled() || + base::FeatureList::IsEnabled(::features::kGuestViewCrossProcessFrames); +#else return true; +#endif } // static
diff --git a/content/public/android/java/src/org/chromium/content/app/ChildProcessServiceImpl.java b/content/public/android/java/src/org/chromium/content/app/ChildProcessServiceImpl.java index 7df71bb..e6a8443 100644 --- a/content/public/android/java/src/org/chromium/content/app/ChildProcessServiceImpl.java +++ b/content/public/android/java/src/org/chromium/content/app/ChildProcessServiceImpl.java
@@ -362,48 +362,6 @@ } } - /** - * Called from native code to share a surface texture with another child process. - * Through using the callback object the browser is used as a proxy to route the - * call to the correct process. - * - * @param pid Process handle of the child process to share the SurfaceTexture with. - * @param surfaceObject The Surface or SurfaceTexture to share with the other child process. - * @param primaryID Used to route the call to the correct client instance. - * @param secondaryID Used to route the call to the correct client instance. - */ - @SuppressWarnings("unused") - @CalledByNative - private void establishSurfaceTexturePeer( - int pid, Object surfaceObject, int primaryID, int secondaryID) { - if (mCallback == null) { - Log.e(TAG, "No callback interface has been provided."); - return; - } - - Surface surface = null; - boolean needRelease = false; - if (surfaceObject instanceof Surface) { - surface = (Surface) surfaceObject; - } else if (surfaceObject instanceof SurfaceTexture) { - surface = new Surface((SurfaceTexture) surfaceObject); - needRelease = true; - } else { - Log.e(TAG, "Not a valid surfaceObject: %s", surfaceObject); - return; - } - try { - mCallback.establishSurfacePeer(pid, surface, primaryID, secondaryID); - } catch (RemoteException e) { - Log.e(TAG, "Unable to call establishSurfaceTexturePeer: %s", e); - return; - } finally { - if (needRelease) { - surface.release(); - } - } - } - @SuppressWarnings("unused") @CalledByNative private void forwardSurfaceTextureForSurfaceRequest(
diff --git a/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java b/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java index 9b7d6b2..1a8996c8 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java +++ b/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java
@@ -847,25 +847,6 @@ private static IChildProcessCallback createCallback( final int childProcessId, final int callbackType) { return new IChildProcessCallback.Stub() { - /** - * This is called by the remote service regularly to tell us about new values. Note that - * IPC calls are dispatched through a thread pool running in each process, so the code - * executing here will NOT be running in our main thread -- so, to update the UI, we - * need to use a Handler. - */ - @Override - public void establishSurfacePeer( - int pid, Surface surface, int primaryID, int secondaryID) { - // Do not allow a malicious renderer to connect to a producer. This is only used - // from stream textures managed by the GPU process. - if (callbackType != CALLBACK_FOR_GPU_PROCESS) { - Log.e(TAG, "Illegal callback for non-GPU process."); - return; - } - - nativeEstablishSurfacePeer(pid, surface, primaryID, secondaryID); - } - @Override public void forwardSurfaceForSurfaceRequest( UnguessableToken requestToken, Surface surface) { @@ -998,8 +979,6 @@ } private static native void nativeOnChildProcessStarted(long clientContext, int pid); - private static native void nativeEstablishSurfacePeer( - int pid, Surface surface, int primaryID, int secondaryID); private static native void nativeCompleteScopedSurfaceRequest( UnguessableToken requestToken, Surface surface); private static native boolean nativeIsSingleProcess();
diff --git a/content/public/android/java/src/org/chromium/content/common/IChildProcessCallback.aidl b/content/public/android/java/src/org/chromium/content/common/IChildProcessCallback.aidl index 85bebb93..4285e3d9 100644 --- a/content/public/android/java/src/org/chromium/content/common/IChildProcessCallback.aidl +++ b/content/public/android/java/src/org/chromium/content/common/IChildProcessCallback.aidl
@@ -9,10 +9,6 @@ interface IChildProcessCallback { - // Conduit to pass a Surface from the sandboxed renderer to the plugin. - void establishSurfacePeer( - int pid, in Surface surface, int primaryID, int secondaryID); - void forwardSurfaceForSurfaceRequest( in UnguessableToken requestToken, in Surface surface);
diff --git a/content/public/common/BUILD.gn b/content/public/common/BUILD.gn index 9e84aa7..9980e59 100644 --- a/content/public/common/BUILD.gn +++ b/content/public/common/BUILD.gn
@@ -248,6 +248,7 @@ ":service_names", "//content/common", "//content/public/common:interfaces", + "//mojo/edk/system", "//mojo/public/cpp/bindings", "//services/service_manager/public/cpp", "//services/service_manager/public/interfaces",
diff --git a/content/public/common/child_process_host.h b/content/public/common/child_process_host.h index c82774e..6a541cb 100644 --- a/content/public/common/child_process_host.h +++ b/content/public/common/child_process_host.h
@@ -11,6 +11,7 @@ #include "build/build_config.h" #include "content/common/content_export.h" #include "ipc/ipc_channel_proxy.h" +#include "mojo/edk/embedder/pending_process_connection.h" namespace base { class FilePath; @@ -85,7 +86,8 @@ // // DEPRECATED: Don't use this. Instead implement GetRemoteInterfaces() in the // delegate and use the CreateChannelMojo() version below. - virtual std::string CreateChannelMojo(const std::string& child_token) = 0; + virtual std::string CreateChannelMojo( + mojo::edk::PendingProcessConnection* connection) = 0; // Creates the IPC channel over a Mojo message pipe. The pipe connection is // brokered through the Service Manager like any other service connection.
diff --git a/content/public/common/window_container_type.cc b/content/public/common/window_container_type.cc index 265e371..1cd71e6d 100644 --- a/content/public/common/window_container_type.cc +++ b/content/public/common/window_container_type.cc
@@ -7,16 +7,6 @@ #include <stddef.h> #include "base/strings/string_util.h" -#include "third_party/WebKit/public/platform/WebString.h" -#include "third_party/WebKit/public/platform/WebVector.h" -#include "third_party/WebKit/public/web/WebWindowFeatures.h" - -namespace { - -const char kBackground[] = "background"; -const char kPersistent[] = "persistent"; - -} // namespace const WindowContainerType WINDOW_CONTAINER_TYPE_NORMAL = content::mojom::WindowContainerType::NORMAL; @@ -24,29 +14,3 @@ content::mojom::WindowContainerType::BACKGROUND; const WindowContainerType WINDOW_CONTAINER_TYPE_PERSISTENT = content::mojom::WindowContainerType::PERSISTENT; - -WindowContainerType WindowFeaturesToContainerType( - const blink::WebWindowFeatures& window_features) { - bool background = false; - bool persistent = false; - - for (size_t i = 0; i < window_features.additionalFeatures.size(); ++i) { - blink::WebString feature = window_features.additionalFeatures[i]; - if (feature.containsOnlyASCII()) { - std::string featureASCII = feature.ascii(); - if (base::LowerCaseEqualsASCII(featureASCII, kBackground)) - background = true; - else if (base::LowerCaseEqualsASCII(featureASCII, kPersistent)) - persistent = true; - } - } - - if (background) { - if (persistent) - return WINDOW_CONTAINER_TYPE_PERSISTENT; - else - return WINDOW_CONTAINER_TYPE_BACKGROUND; - } else { - return WINDOW_CONTAINER_TYPE_NORMAL; - } -}
diff --git a/content/public/common/window_container_type.h b/content/public/common/window_container_type.h index 06f0267..99d2b46 100644 --- a/content/public/common/window_container_type.h +++ b/content/public/common/window_container_type.h
@@ -8,12 +8,6 @@ #include "content/common/content_export.h" #include "content/public/common/window_container_type.mojom.h" -namespace blink { - -struct WebWindowFeatures; - -} - using WindowContainerType = content::mojom::WindowContainerType; // TODO(rockot): Remove these duplicate definitions by updating all references @@ -26,8 +20,4 @@ extern const WindowContainerType CONTENT_EXPORT WINDOW_CONTAINER_TYPE_PERSISTENT; -// Conversion function: -WindowContainerType WindowFeaturesToContainerType( - const blink::WebWindowFeatures& window_features); - #endif // CONTENT_PUBLIC_COMMON_WINDOW_CONTAINER_TYPE_H_
diff --git a/content/renderer/gpu/stream_texture_host_android.cc b/content/renderer/gpu/stream_texture_host_android.cc index 120a472..f9f2036 100644 --- a/content/renderer/gpu/stream_texture_host_android.cc +++ b/content/renderer/gpu/stream_texture_host_android.cc
@@ -58,13 +58,6 @@ listener_->OnFrameAvailable(); } -void StreamTextureHost::EstablishPeer(int player_id, int frame_id) { - if (channel_) { - channel_->Send( - new GpuStreamTextureMsg_EstablishPeer(route_id_, frame_id, player_id)); - } -} - void StreamTextureHost::SetStreamTextureSize(const gfx::Size& size) { if (channel_) channel_->Send(new GpuStreamTextureMsg_SetSize(route_id_, size));
diff --git a/content/renderer/gpu/stream_texture_host_android.h b/content/renderer/gpu/stream_texture_host_android.h index 80eb463..51082d8f 100644 --- a/content/renderer/gpu/stream_texture_host_android.h +++ b/content/renderer/gpu/stream_texture_host_android.h
@@ -9,7 +9,6 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" -#include "gpu/ipc/common/android/surface_texture_peer.h" #include "ipc/ipc_listener.h" #include "ipc/ipc_message.h" @@ -49,7 +48,6 @@ bool OnMessageReceived(const IPC::Message& message) override; void OnChannelError() override; - void EstablishPeer(int player_id, int frame_id); void SetStreamTextureSize(const gfx::Size& size); void ForwardStreamTextureForSurfaceRequest( const base::UnguessableToken& request_token);
diff --git a/content/renderer/media/android/stream_texture_factory.cc b/content/renderer/media/android/stream_texture_factory.cc index 57fff3d..b875954 100644 --- a/content/renderer/media/android/stream_texture_factory.cc +++ b/content/renderer/media/android/stream_texture_factory.cc
@@ -68,10 +68,6 @@ received_frame_cb_.Run(); } -void StreamTextureProxy::EstablishPeer(int player_id, int frame_id) { - host_->EstablishPeer(player_id, frame_id); -} - void StreamTextureProxy::SetStreamTextureSize(const gfx::Size& size) { host_->SetStreamTextureSize(size); }
diff --git a/content/renderer/media/android/stream_texture_factory.h b/content/renderer/media/android/stream_texture_factory.h index 1d90785..41870332 100644 --- a/content/renderer/media/android/stream_texture_factory.h +++ b/content/renderer/media/android/stream_texture_factory.h
@@ -53,12 +53,6 @@ // Set the streamTexture size. void SetStreamTextureSize(const gfx::Size& size); - // Send an IPC message to the browser process to request a java surface - // object for the given route_id. After the the surface is created, - // it will be passed back to the WebMediaPlayerAndroid object identified by - // the player_id. - void EstablishPeer(int player_id, int frame_id); - // Sends an IPC to the GPU process. // Asks the StreamTexture to forward its SurfaceTexture to the // ScopedSurfaceRequestManager, using the gpu::ScopedSurfaceRequestConduit.
diff --git a/content/renderer/mus/renderer_window_tree_client.cc b/content/renderer/mus/renderer_window_tree_client.cc index a6dec993..0e9f0b64 100644 --- a/content/renderer/mus/renderer_window_tree_client.cc +++ b/content/renderer/mus/renderer_window_tree_client.cc
@@ -165,6 +165,7 @@ void RendererWindowTreeClient::OnWindowInputEvent( uint32_t event_id, ui::Id window_id, + int64_t display_id, std::unique_ptr<ui::Event> event, bool matches_pointer_watcher) { NOTREACHED(); @@ -172,7 +173,8 @@ void RendererWindowTreeClient::OnPointerEventObserved( std::unique_ptr<ui::Event> event, - uint32_t window_id) { + uint32_t window_id, + int64_t display_id) { NOTREACHED(); }
diff --git a/content/renderer/mus/renderer_window_tree_client.h b/content/renderer/mus/renderer_window_tree_client.h index b1615e5..48fb20e 100644 --- a/content/renderer/mus/renderer_window_tree_client.h +++ b/content/renderer/mus/renderer_window_tree_client.h
@@ -105,10 +105,12 @@ const base::Optional<std::vector<uint8_t>>& new_data) override; void OnWindowInputEvent(uint32_t event_id, ui::Id window_id, + int64_t display_id, std::unique_ptr<ui::Event> event, bool matches_pointer_watcher) override; void OnPointerEventObserved(std::unique_ptr<ui::Event> event, - uint32_t window_id) override; + uint32_t window_id, + int64_t display_id) override; void OnWindowFocused(ui::Id focused_window_id) override; void OnWindowPredefinedCursorChanged(ui::Id window_id, ui::mojom::Cursor cursor) override;
diff --git a/content/renderer/render_thread_impl_browsertest.cc b/content/renderer/render_thread_impl_browsertest.cc index af28029..6331ece 100644 --- a/content/renderer/render_thread_impl_browsertest.cc +++ b/content/renderer/render_thread_impl_browsertest.cc
@@ -44,6 +44,7 @@ #include "ipc/ipc.mojom.h" #include "ipc/ipc_channel_mojo.h" #include "mojo/edk/embedder/embedder.h" +#include "mojo/edk/embedder/pending_process_connection.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/WebKit/public/platform/scheduler/renderer/renderer_scheduler.h" #include "ui/gfx/buffer_format_util.h" @@ -179,8 +180,9 @@ InitializeMojo(); shell_context_.reset(new TestServiceManagerContext); + mojo::edk::PendingProcessConnection process_connection; child_connection_.reset(new ChildConnection( - mojom::kRendererServiceName, "test", mojo::edk::GenerateRandomToken(), + mojom::kRendererServiceName, "test", &process_connection, ServiceManagerConnection::GetForProcess()->GetConnector(), io_task_runner));
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index 0788677..b5e2741 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc
@@ -531,6 +531,37 @@ ui::LatencyInfo latency_info_; }; +const char kWindowFeatureBackground[] = "background"; +const char kWindowFeaturePersistent[] = "persistent"; + +WindowContainerType WindowFeaturesToContainerType( + const blink::WebWindowFeatures& window_features) { + bool background = false; + bool persistent = false; + + for (size_t i = 0; i < window_features.additionalFeatures.size(); ++i) { + blink::WebString feature = window_features.additionalFeatures[i]; + if (feature.containsOnlyASCII()) { + std::string featureASCII = feature.ascii(); + if (base::LowerCaseEqualsASCII(featureASCII, kWindowFeatureBackground)) { + background = true; + } else if (base::LowerCaseEqualsASCII(featureASCII, + kWindowFeaturePersistent)) { + persistent = true; + } + } + } + + if (background) { + if (persistent) + return WINDOW_CONTAINER_TYPE_PERSISTENT; + else + return WINDOW_CONTAINER_TYPE_BACKGROUND; + } else { + return WINDOW_CONTAINER_TYPE_NORMAL; + } +} + } // namespace RenderViewImpl::RenderViewImpl(CompositorDependencies* compositor_deps,
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index 4c248de..56837a4 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -1317,6 +1317,7 @@ "../common/database_connections_unittest.cc", "../common/database_identifier_unittest.cc", "../common/dom_storage/dom_storage_map_unittest.cc", + "../common/feature_policy/feature_policy_unittest.cc", "../common/fileapi/file_system_util_unittest.cc", "../common/host_shared_bitmap_manager_unittest.cc", "../common/indexed_db/indexed_db_key_unittest.cc", @@ -1640,6 +1641,9 @@ if (use_aura) { sources += [ "../browser/media/capture/cursor_renderer_aura_unittest.cc" ] } + if (is_mac) { + sources += [ "../browser/media/capture/cursor_renderer_mac_unittest.mm" ] + } if (is_chromeos) { sources += [ "../browser/media/capture/desktop_capture_device_aura_unittest.cc" ]
diff --git a/content/test/content_test_suite.cc b/content/test/content_test_suite.cc index 734c5b0..ab0f2b5 100644 --- a/content/test/content_test_suite.cc +++ b/content/test/content_test_suite.cc
@@ -95,9 +95,6 @@ testing::TestEventListeners& listeners = testing::UnitTest::GetInstance()->listeners(); listeners.Append(new TestInitializationListener); -#if defined(OS_ANDROID) - content::BrowserMediaPlayerManager::InitSurfaceTexturePeer(); -#endif } } // namespace content
diff --git a/content/test/gpu/gpu_tests/pixel_expectations.py b/content/test/gpu/gpu_tests/pixel_expectations.py index e335b3ee..c59911e 100644 --- a/content/test/gpu/gpu_tests/pixel_expectations.py +++ b/content/test/gpu/gpu_tests/pixel_expectations.py
@@ -36,7 +36,7 @@ self.Fail('Pixel_OffscreenCanvasUnaccelerated2DGPUCompositingWorker', ['mac', ('nvidia', 0xfe9)], bug=652931) - self.Flaky('Pixel_CSSFilterEffects', + self.Fail('Pixel_CSSFilterEffects', ['mac', ('nvidia', 0xfe9)], bug=690277) # TODO(kbr): flakily timing out on this configuration.
diff --git a/content/test/gpu/gpu_tests/webgl_conformance_expectations.py b/content/test/gpu/gpu_tests/webgl_conformance_expectations.py index f613d150..87ece49f 100644 --- a/content/test/gpu/gpu_tests/webgl_conformance_expectations.py +++ b/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
@@ -590,20 +590,10 @@ # Nexus 9 self.Fail('deqp/data/gles2/shaders/functions.html', ['android', 'nvidia'], bug=478572) - self.Skip('conformance/extensions/oes-texture-float-with-video.html', - ['android', 'nvidia'], bug=499555) # flaky self.Fail('conformance/glsl/bugs/multiplication-assignment.html', ['android', 'nvidia'], bug=606096) - self.Fail('conformance/glsl/constructors/glsl-construct-mat2.html', - ['android', 'nvidia'], bug=606096) - self.Fail('conformance/glsl/constructors/glsl-construct-mat3.html', - ['android', 'nvidia'], bug=606096) - self.Fail('conformance/glsl/constructors/glsl-construct-mat4.html', - ['android', 'nvidia'], bug=606096) self.Fail('WebglExtension_WEBGL_compressed_texture_atc', ['android', ('nvidia', 'NVIDIA Tegra')]) - self.Fail('deqp/data/gles2/shaders/conversions.html', - ['android', ('nvidia', 'NVIDIA Tegra')], bug=478572) # Pixel C self.Fail('conformance/glsl/bugs/constant-precision-qualifier.html',
diff --git a/gpu/ipc/common/BUILD.gn b/gpu/ipc/common/BUILD.gn index 396041e..12a0794e 100644 --- a/gpu/ipc/common/BUILD.gn +++ b/gpu/ipc/common/BUILD.gn
@@ -106,8 +106,6 @@ sources += [ "android/scoped_surface_request_conduit.cc", "android/scoped_surface_request_conduit.h", - "android/surface_texture_peer.cc", - "android/surface_texture_peer.h", ] }
diff --git a/gpu/ipc/common/android/surface_texture_peer.cc b/gpu/ipc/common/android/surface_texture_peer.cc deleted file mode 100644 index 397c5ba..0000000 --- a/gpu/ipc/common/android/surface_texture_peer.cc +++ /dev/null
@@ -1,31 +0,0 @@ -// Copyright (c) 2012 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 "gpu/ipc/common/android/surface_texture_peer.h" - -#include "base/logging.h" - -namespace gpu { - -namespace { -SurfaceTexturePeer* g_instance_ = nullptr; -} // namespace - -SurfaceTexturePeer::SurfaceTexturePeer() {} - -SurfaceTexturePeer::~SurfaceTexturePeer() {} - -// static -SurfaceTexturePeer* SurfaceTexturePeer::GetInstance() { - DCHECK(g_instance_); - return g_instance_; -} - -// static -void SurfaceTexturePeer::InitInstance(SurfaceTexturePeer* instance) { - DCHECK(!g_instance_); - g_instance_ = instance; -} - -} // namespace gpu
diff --git a/gpu/ipc/common/android/surface_texture_peer.h b/gpu/ipc/common/android/surface_texture_peer.h deleted file mode 100644 index bbfc78d0..0000000 --- a/gpu/ipc/common/android/surface_texture_peer.h +++ /dev/null
@@ -1,39 +0,0 @@ -// Copyright (c) 2012 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. - -#ifndef GPU_IPC_COMMON_ANDROID_SURFACE_TEXTURE_PEER_H_ -#define GPU_IPC_COMMON_ANDROID_SURFACE_TEXTURE_PEER_H_ - -#include "base/macros.h" -#include "base/process/process.h" -#include "gpu/gpu_export.h" -#include "ui/gl/android/surface_texture.h" - -namespace gpu { - -class GPU_EXPORT SurfaceTexturePeer { - public: - static SurfaceTexturePeer* GetInstance(); - - static void InitInstance(SurfaceTexturePeer* instance); - - // Establish the producer end for the given surface texture in another - // process. - virtual void EstablishSurfaceTexturePeer( - base::ProcessHandle pid, - scoped_refptr<gl::SurfaceTexture> surface_texture, - int primary_id, - int secondary_id) = 0; - - protected: - SurfaceTexturePeer(); - virtual ~SurfaceTexturePeer(); - - private: - DISALLOW_COPY_AND_ASSIGN(SurfaceTexturePeer); -}; - -} // namespace gpu - -#endif // GPU_IPC_COMMON_ANDROID_SURFACE_TEXTURE_PEER_H_
diff --git a/gpu/ipc/common/gpu_messages.h b/gpu/ipc/common/gpu_messages.h index b1d6fdc4..f66974b 100644 --- a/gpu/ipc/common/gpu_messages.h +++ b/gpu/ipc/common/gpu_messages.h
@@ -37,9 +37,7 @@ #include "ui/gfx/swap_result.h" #include "url/ipc/url_param_traits.h" -#if defined(OS_ANDROID) -#include "gpu/ipc/common/android/surface_texture_peer.h" -#elif defined(OS_MACOSX) +#if defined(OS_MACOSX) #include "ui/base/cocoa/remote_layer_api.h" #include "ui/gfx/mac/io_surface.h" #endif @@ -124,13 +122,6 @@ #if defined(OS_ANDROID) //------------------------------------------------------------------------------ -// Stream Texture Messages -// Tells the GPU process create and send the java surface texture object to -// the renderer process through the binder thread. -IPC_MESSAGE_ROUTED2(GpuStreamTextureMsg_EstablishPeer, - int32_t, /* primary_id */ - int32_t /* secondary_id */) - // Tells the StreamTexture to send its SurfaceTexture to the browser process, // via the ScopedSurfaceRequestConduit. IPC_MESSAGE_ROUTED1(GpuStreamTextureMsg_ForwardForSurfaceRequest,
diff --git a/gpu/ipc/service/stream_texture_android.cc b/gpu/ipc/service/stream_texture_android.cc index d107005..173dab82 100644 --- a/gpu/ipc/service/stream_texture_android.cc +++ b/gpu/ipc/service/stream_texture_android.cc
@@ -12,7 +12,6 @@ #include "gpu/command_buffer/service/gles2_cmd_decoder.h" #include "gpu/command_buffer/service/texture_manager.h" #include "gpu/ipc/common/android/scoped_surface_request_conduit.h" -#include "gpu/ipc/common/android/surface_texture_peer.h" #include "gpu/ipc/common/gpu_messages.h" #include "gpu/ipc/service/gpu_channel.h" #include "ui/gfx/geometry/size.h" @@ -198,7 +197,6 @@ IPC_MESSAGE_HANDLER(GpuStreamTextureMsg_StartListening, OnStartListening) IPC_MESSAGE_HANDLER(GpuStreamTextureMsg_ForwardForSurfaceRequest, OnForwardForSurfaceRequest) - IPC_MESSAGE_HANDLER(GpuStreamTextureMsg_EstablishPeer, OnEstablishPeer) IPC_MESSAGE_HANDLER(GpuStreamTextureMsg_SetSize, OnSetSize) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() @@ -212,16 +210,6 @@ has_listener_ = true; } -void StreamTexture::OnEstablishPeer(int32_t primary_id, int32_t secondary_id) { - if (!owner_stub_) - return; - - base::ProcessHandle process = owner_stub_->channel()->GetClientPID(); - - SurfaceTexturePeer::GetInstance()->EstablishSurfaceTexturePeer( - process, surface_texture_, primary_id, secondary_id); -} - void StreamTexture::OnForwardForSurfaceRequest( const base::UnguessableToken& request_token) { if (!owner_stub_)
diff --git a/gpu/ipc/service/stream_texture_android.h b/gpu/ipc/service/stream_texture_android.h index b7ad291..d350c46 100644 --- a/gpu/ipc/service/stream_texture_android.h +++ b/gpu/ipc/service/stream_texture_android.h
@@ -79,7 +79,6 @@ // IPC message handlers: void OnStartListening(); - void OnEstablishPeer(int32_t primary_id, int32_t secondary_id); void OnForwardForSurfaceRequest(const base::UnguessableToken& request_token); void OnSetSize(const gfx::Size& size) { size_ = size; }
diff --git a/ios/chrome/browser/metrics/BUILD.gn b/ios/chrome/browser/metrics/BUILD.gn index 82ba1a2..93a5c48 100644 --- a/ios/chrome/browser/metrics/BUILD.gn +++ b/ios/chrome/browser/metrics/BUILD.gn
@@ -25,6 +25,7 @@ ] deps = [ "//base", + "//components/browser_sync", "//components/crash/core/common", "//components/keyed_service/core", "//components/keyed_service/ios",
diff --git a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.h b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.h index 365e8be..20ff345 100644 --- a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.h +++ b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.h
@@ -19,6 +19,7 @@ #include "components/metrics/profiler/tracking_synchronizer_observer.h" #include "components/omnibox/browser/omnibox_event_global_tracker.h" #include "components/ukm/observers/history_delete_observer.h" +#include "components/ukm/observers/sync_disable_observer.h" #include "ios/web/public/web_state/global_web_state_observer.h" class IOSChromeStabilityMetricsProvider; @@ -45,6 +46,7 @@ : public metrics::MetricsServiceClient, public metrics::TrackingSynchronizerObserver, public ukm::HistoryDeleteObserver, + public ukm::SyncDisableObserver, public web::GlobalWebStateObserver { public: ~IOSChromeMetricsServiceClient() override; @@ -76,9 +78,12 @@ base::string16 GetRegistryBackupKey() override; void OnRendererProcessCrash() override; - // ukm::HistoryDeleteObserver + // ukm::HistoryDeleteObserver: void OnHistoryDeleted() override; + // ukm::SyncDisableObserver: + void OnSyncPrefsChanged(bool must_purge) override; + // web::GlobalWebStateObserver: void WebStateDidStartLoading(web::WebState* web_state) override; void WebStateDidStopLoading(web::WebState* web_state) override; @@ -118,8 +123,8 @@ // there was recent activity. void RegisterForNotifications(); - // Register to observe history delete events on a browser state. - void RegisterForHistoryDeletions(ios::ChromeBrowserState* browser_state); + // Register to observe events on a browser state's services. + void RegisterForBrowserStateEvents(ios::ChromeBrowserState* browser_state); // Called when a tab is parented. void OnTabParented(web::WebState* web_state);
diff --git a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm index 7cbd896..71d8b80 100644 --- a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm +++ b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm
@@ -20,6 +20,7 @@ #include "base/rand_util.h" #include "base/strings/string16.h" #include "base/threading/platform_thread.h" +#include "components/browser_sync/profile_sync_service.h" #include "components/crash/core/common/crash_keys.h" #include "components/history/core/browser/history_service.h" #include "components/keyed_service/core/service_access_type.h" @@ -54,6 +55,7 @@ #include "ios/chrome/browser/metrics/ios_chrome_stability_metrics_provider.h" #include "ios/chrome/browser/metrics/mobile_session_shutdown_metrics_provider.h" #include "ios/chrome/browser/signin/ios_chrome_signin_status_metrics_provider_delegate.h" +#include "ios/chrome/browser/sync/ios_chrome_profile_sync_service_factory.h" #include "ios/chrome/browser/sync/ios_chrome_sync_client.h" #include "ios/chrome/browser/tab_parenting_global_observer.h" #include "ios/chrome/browser/tabs/tab_model_list.h" @@ -327,16 +329,20 @@ ->GetChromeBrowserStateManager() ->GetLoadedBrowserStates(); for (ios::ChromeBrowserState* browser_state : loaded_browser_states) { - RegisterForHistoryDeletions(browser_state); + RegisterForBrowserStateEvents(browser_state); } } -void IOSChromeMetricsServiceClient::RegisterForHistoryDeletions( +void IOSChromeMetricsServiceClient::RegisterForBrowserStateEvents( ios::ChromeBrowserState* browser_state) { history::HistoryService* history_service = ios::HistoryServiceFactory::GetForBrowserState( browser_state, ServiceAccessType::IMPLICIT_ACCESS); ObserveServiceForDeletions(history_service); + browser_sync::ProfileSyncService* sync = + IOSChromeProfileSyncServiceFactory::GetInstance()->GetForBrowserState( + browser_state); + ObserveServiceForSyncDisables(static_cast<syncer::SyncService*>(sync)); } void IOSChromeMetricsServiceClient::OnTabParented(web::WebState* web_state) { @@ -357,3 +363,14 @@ if (ukm_service_) ukm_service_->Purge(); } + +void IOSChromeMetricsServiceClient::OnSyncPrefsChanged(bool must_purge) { + if (!ukm_service_) + return; + if (must_purge) { + ukm_service_->Purge(); + ukm_service_->ResetClientId(); + } + // Signal service manager to enable/disable UKM based on new state. + UpdateRunningServices(); +}
diff --git a/mojo/edk/embedder/BUILD.gn b/mojo/edk/embedder/BUILD.gn index c652e517..b3fa007 100644 --- a/mojo/edk/embedder/BUILD.gn +++ b/mojo/edk/embedder/BUILD.gn
@@ -12,6 +12,7 @@ "named_platform_channel_pair.h", "named_platform_handle.h", "named_platform_handle_utils.h", + "pending_process_connection.h", "platform_channel_pair.h", "platform_handle.h", "platform_handle_utils.h", @@ -39,6 +40,7 @@ "embedder_internal.h", "entrypoints.cc", "entrypoints.h", + "pending_process_connection.cc", "scoped_ipc_support.cc", "scoped_ipc_support.h",
diff --git a/mojo/edk/embedder/embedder.cc b/mojo/edk/embedder/embedder.cc index 17cfe7d..d581e65 100644 --- a/mojo/edk/embedder/embedder.cc +++ b/mojo/edk/embedder/embedder.cc
@@ -42,27 +42,6 @@ void SetMaxMessageSize(size_t bytes) { } -void ChildProcessLaunched(base::ProcessHandle child_process, - ScopedPlatformHandle server_pipe, - const std::string& child_token) { - ChildProcessLaunched(child_process, std::move(server_pipe), - child_token, ProcessErrorCallback()); -} - -void ChildProcessLaunched(base::ProcessHandle child_process, - ScopedPlatformHandle server_pipe, - const std::string& child_token, - const ProcessErrorCallback& process_error_callback) { - CHECK(internal::g_core); - internal::g_core->AddChild(child_process, std::move(server_pipe), - child_token, process_error_callback); -} - -void ChildProcessLaunchFailed(const std::string& child_token) { - CHECK(internal::g_core); - internal::g_core->ChildLaunchFailed(child_token); -} - void SetParentPipeHandle(ScopedPlatformHandle pipe) { CHECK(internal::g_core); internal::g_core->InitChild(std::move(pipe)); @@ -155,11 +134,6 @@ } #endif -ScopedMessagePipeHandle CreateParentMessagePipe( - const std::string& token, const std::string& child_token) { - return internal::g_core->CreateParentMessagePipe(token, child_token); -} - ScopedMessagePipeHandle CreateChildMessagePipe(const std::string& token) { return internal::g_core->CreateChildMessagePipe(token); }
diff --git a/mojo/edk/embedder/embedder.h b/mojo/edk/embedder/embedder.h index b7ceaa92..97258e52 100644 --- a/mojo/edk/embedder/embedder.h +++ b/mojo/edk/embedder/embedder.h
@@ -16,6 +16,7 @@ #include "base/memory/shared_memory_handle.h" #include "base/process/process_handle.h" #include "base/task_runner.h" +#include "mojo/edk/embedder/pending_process_connection.h" #include "mojo/edk/embedder/scoped_platform_handle.h" #include "mojo/edk/system/system_impl_export.h" #include "mojo/public/cpp/system/message_pipe.h" @@ -27,8 +28,6 @@ namespace mojo { namespace edk { -using ProcessErrorCallback = base::Callback<void(const std::string& error)>; - // Basic configuration/initialization ------------------------------------------ // |Init()| sets up the basic Mojo system environment, making the |Mojo...()| @@ -38,30 +37,9 @@ // Allows changing the default max message size. Must be called before Init. MOJO_SYSTEM_IMPL_EXPORT void SetMaxMessageSize(size_t bytes); -// Called in the parent process for each child process that is launched. -MOJO_SYSTEM_IMPL_EXPORT void ChildProcessLaunched( - base::ProcessHandle child_process, - ScopedPlatformHandle server_pipe, - const std::string& child_token); - -// Called in the parent process for each child process that is launched. -// |process_error_callback| is called if the system becomes aware of some -// internal error related to this process, e.g., if the system is notified of a -// bad message from this process via the |MojoNotifyBadMessage()| API. -MOJO_SYSTEM_IMPL_EXPORT void ChildProcessLaunched( - base::ProcessHandle child_process, - ScopedPlatformHandle server_pipe, - const std::string& child_token, - const ProcessErrorCallback& error_callback); - -// Called in the parent process when a child process fails to launch. -// Exactly one of ChildProcessLaunched() or ChildProcessLaunchFailed() must be -// called per child process launch attempt. -MOJO_SYSTEM_IMPL_EXPORT void ChildProcessLaunchFailed( - const std::string& child_token); - -// Should be called as early as possible in the child process with the handle -// that the parent received from ChildProcessLaunched. +// Should be called as early as possible in a child process with a handle to the +// other end of a pipe provided in the parent to +// PendingProcessConnection::Connect. MOJO_SYSTEM_IMPL_EXPORT void SetParentPipeHandle(ScopedPlatformHandle pipe); // Same as above but extracts the pipe handle from the command line. See @@ -170,25 +148,14 @@ base::PortProvider* port_provider); #endif -// Creates a message pipe from a token. A child embedder must also have this -// token and call CreateChildMessagePipe() with it in order for the pipe to get -// connected. |child_token| identifies the child process and should be the same -// as the token passed into ChildProcessLaunched(). If they are different, the -// returned message pipe will not be signaled of peer closure if the child -// process dies before establishing connection to the pipe. -MOJO_SYSTEM_IMPL_EXPORT ScopedMessagePipeHandle -CreateParentMessagePipe(const std::string& token, - const std::string& child_token); - -// Creates a message pipe from a token in a child process. The parent must also -// have this token and call CreateParentMessagePipe() with it in order for the -// pipe to get connected. +// Creates a message pipe from a token in a child process. This token must have +// been acquired by a corresponding call to +// PendingProcessConnection::CreateMessagePipe. MOJO_SYSTEM_IMPL_EXPORT ScopedMessagePipeHandle CreateChildMessagePipe(const std::string& token); -// Generates a random ASCII token string for use with CreateParentMessagePipe() -// and CreateChildMessagePipe() above. The generated token is suitably random so -// as to not have to worry about collisions with other generated tokens. +// Generates a random ASCII token string for use with various APIs that expect +// a globally unique token string. MOJO_SYSTEM_IMPL_EXPORT std::string GenerateRandomToken(); // Sets system properties that can be read by the MojoGetProperty() API. See the
diff --git a/mojo/edk/embedder/embedder_unittest.cc b/mojo/edk/embedder/embedder_unittest.cc index f0fe440..2eb6beb 100644 --- a/mojo/edk/embedder/embedder_unittest.cc +++ b/mojo/edk/embedder/embedder_unittest.cc
@@ -16,6 +16,7 @@ #include "base/files/file.h" #include "base/logging.h" #include "base/macros.h" +#include "base/memory/ptr_util.h" #include "base/memory/shared_memory.h" #include "base/message_loop/message_loop.h" #include "base/path_service.h" @@ -26,6 +27,7 @@ #include "mojo/edk/embedder/embedder.h" #include "mojo/edk/embedder/named_platform_handle.h" #include "mojo/edk/embedder/named_platform_handle_utils.h" +#include "mojo/edk/embedder/pending_process_connection.h" #include "mojo/edk/embedder/platform_channel_pair.h" #include "mojo/edk/embedder/test_embedder.h" #include "mojo/edk/system/test_utils.h" @@ -189,13 +191,12 @@ } TEST_F(EmbedderTest, PipeSetup) { - std::string child_token = GenerateRandomToken(); - std::string pipe_token = GenerateRandomToken(); - - ScopedMessagePipeHandle parent_mp = - CreateParentMessagePipe(pipe_token, child_token); - ScopedMessagePipeHandle child_mp = - CreateChildMessagePipe(pipe_token); + // Ensures that a pending process connection's message pipe can be claimed by + // the host process itself. + PendingProcessConnection process; + std::string pipe_token; + ScopedMessagePipeHandle parent_mp = process.CreateMessagePipe(&pipe_token); + ScopedMessagePipeHandle child_mp = CreateChildMessagePipe(pipe_token); const std::string kHello = "hello"; WriteMessage(parent_mp.get().value(), kHello); @@ -206,13 +207,10 @@ TEST_F(EmbedderTest, PipeSetup_LaunchDeath) { PlatformChannelPair pair; - std::string child_token = GenerateRandomToken(); - std::string pipe_token = GenerateRandomToken(); - - ScopedMessagePipeHandle parent_mp = - CreateParentMessagePipe(pipe_token, child_token); - ChildProcessLaunched(base::GetCurrentProcessHandle(), pair.PassServerHandle(), - child_token); + PendingProcessConnection process; + std::string pipe_token; + ScopedMessagePipeHandle parent_mp = process.CreateMessagePipe(&pipe_token); + process.Connect(base::GetCurrentProcessHandle(), pair.PassServerHandle()); // Close the remote end, simulating child death before the child connects to // the reserved port. @@ -227,13 +225,14 @@ TEST_F(EmbedderTest, PipeSetup_LaunchFailure) { PlatformChannelPair pair; - std::string child_token = GenerateRandomToken(); - std::string pipe_token = GenerateRandomToken(); + auto process = base::MakeUnique<PendingProcessConnection>(); + std::string pipe_token; + ScopedMessagePipeHandle parent_mp = process->CreateMessagePipe(&pipe_token); - ScopedMessagePipeHandle parent_mp = - CreateParentMessagePipe(pipe_token, child_token); + // Ensure that if a PendingProcessConnection goes away before Connect() is + // called, any message pipes associated with it detect peer closure. + process.reset(); - ChildProcessLaunchFailed(child_token); EXPECT_EQ(MOJO_RESULT_OK, MojoWait(parent_mp.get().value(), MOJO_HANDLE_SIGNAL_PEER_CLOSED, MOJO_DEADLINE_INDEFINITE,
diff --git a/mojo/edk/embedder/named_platform_channel_pair.h b/mojo/edk/embedder/named_platform_channel_pair.h index 71688861..5a83ae3 100644 --- a/mojo/edk/embedder/named_platform_channel_pair.h +++ b/mojo/edk/embedder/named_platform_channel_pair.h
@@ -41,7 +41,7 @@ ~NamedPlatformChannelPair(); // Note: It is NOT acceptable to use this handle as a generic pipe channel. It - // MUST be passed to mojo::edk::ChildProcessLaunched() only. + // MUST be passed to PendingProcessConnection::Connect() only. ScopedPlatformHandle PassServerHandle(); // To be called in the child process, after the parent process called
diff --git a/mojo/edk/embedder/pending_process_connection.cc b/mojo/edk/embedder/pending_process_connection.cc new file mode 100644 index 0000000..8ab58727 --- /dev/null +++ b/mojo/edk/embedder/pending_process_connection.cc
@@ -0,0 +1,50 @@ +// 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 "mojo/edk/embedder/pending_process_connection.h" + +#include "mojo/edk/embedder/embedder.h" +#include "mojo/edk/embedder/embedder_internal.h" +#include "mojo/edk/system/core.h" + +namespace mojo { +namespace edk { + +PendingProcessConnection::PendingProcessConnection() + : process_token_(GenerateRandomToken()) { + DCHECK(internal::g_core); +} + +PendingProcessConnection::~PendingProcessConnection() { + if (has_message_pipes_ && !connected_) { + DCHECK(internal::g_core); + internal::g_core->ChildLaunchFailed(process_token_); + } +} + +ScopedMessagePipeHandle PendingProcessConnection::CreateMessagePipe( + std::string* token) { + has_message_pipes_ = true; + DCHECK(internal::g_core); + *token = GenerateRandomToken(); + return internal::g_core->CreateParentMessagePipe(*token, process_token_); +} + +void PendingProcessConnection::Connect( + base::ProcessHandle process, + ScopedPlatformHandle channel, + const ProcessErrorCallback& error_callback) { + // It's now safe to avoid cleanup in the destructor, as the lifetime of any + // associated resources is effectively bound to the |channel| passed to + // AddChild() below. + DCHECK(!connected_); + connected_ = true; + + DCHECK(internal::g_core); + internal::g_core->AddChild(process, std::move(channel), process_token_, + error_callback); +} + +} // namespace edk +} // namespace mojo
diff --git a/mojo/edk/embedder/pending_process_connection.h b/mojo/edk/embedder/pending_process_connection.h new file mode 100644 index 0000000..1f5cad9 --- /dev/null +++ b/mojo/edk/embedder/pending_process_connection.h
@@ -0,0 +1,123 @@ +// 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. + +#ifndef MOJO_EDK_EMBEDDER_PENDING_PROCESS_CONNECTION_H_ +#define MOJO_EDK_EMBEDDER_PENDING_PROCESS_CONNECTION_H_ + +#include <string> + +#include "base/callback.h" +#include "base/macros.h" +#include "base/process/process_handle.h" +#include "mojo/edk/embedder/scoped_platform_handle.h" +#include "mojo/edk/system/system_impl_export.h" +#include "mojo/public/cpp/system/message_pipe.h" + +namespace mojo { +namespace edk { + +using ProcessErrorCallback = base::Callback<void(const std::string& error)>; + +// Represents a potential connection to an external process. Use this object +// to make other processes reachable from this one via Mojo IPC. Typical usage +// might look something like: +// +// PendingProcessConnection connection; +// +// std::string pipe_token; +// ScopedMessagePipeHandle pipe = connection.CreateMessagePipe(&pipe_token); +// +// // New pipes to the process are fully functional and can be used right +// // away, even if the process doesn't exist yet. +// GoDoSomethingInteresting(std::move(pipe)); +// +// ScopedPlatformChannelPair channel; +// +// // Give the pipe token to the child process via command-line. +// child_command_line.AppendSwitchASCII("yer-pipe", pipe_token); +// +// // Magic child process launcher which gives one end of the pipe to the +// // new process. +// LaunchProcess(child_command_line, channel.PassClientHandle()); +// +// // Some time later... +// connection.Connect(new_process, channel.PassServerHandle()); +// +// If at any point during the above process, |connection| is destroyed before +// Connect() can be called, |pipe| will imminently behave as if its peer has +// been closed. +// +// Otherwise, if the remote process in this example eventually calls: +// +// mojo::edk::SetParentPipeHandle(std::move(client_channel_handle)); +// +// std::string token = command_line.GetSwitchValueASCII("yer-pipe"); +// ScopedMessagePipeHandle pipe = mojo::edk::CreateChildMessagePipe(token); +// +// it will be connected to this process, and its |pipe| will be connected to +// this process's |pipe|. +// +// If the remote process exits or otherwise closes its client channel handle +// before calling CreateChildMessagePipe for a given message pipe token, +// this process's end of the corresponding message pipe will imminently behave +// as if its peer has been closed. +// +class MOJO_SYSTEM_IMPL_EXPORT PendingProcessConnection { + public: + PendingProcessConnection(); + ~PendingProcessConnection(); + + // Creates a message pipe associated with a new globally unique string value + // which will be placed in |*token|. + // + // The other end of the new pipe is obtainable in the remote process (or in + // this process, to facilitate "single-process mode" in some applications) by + // passing the new |*token| value to mojo::edk::CreateChildMessagePipe. It's + // the caller's responsibility to communicate the value of |*token| to the + // remote process by any means available, e.g. a command-line argument on + // process launch, or some other out-of-band communication channel for an + // existing process. + // + // NOTES: This may be called any number of times to create multiple message + // pipes to the same remote process. This call ALWAYS succeeds, returning + // a valid message pipe handle and populating |*token| with a new unique + // string value. + ScopedMessagePipeHandle CreateMessagePipe(std::string* token); + + // Connects to the process. This must be called at most once, with the process + // handle in |process|. + // + // |channel| is the platform handle of an OS pipe which can be used to + // communicate with the connected process. The other end of that pipe must + // ultimately be passed to mojo::edk::SetParentPipeHandle in the remote + // process, and getting that end of the pipe into the other process is the + // embedder's responsibility. + // + // If this method is not called by the time the PendingProcessConnection is + // destroyed, it's assumed that the process is unavailable (e.g. process + // launch failed or the process has otherwise been terminated early), and + // any associated resources, such as remote endpoints of messages pipes + // created by CreateMessagePipe above) will be cleaned up at that time. + void Connect( + base::ProcessHandle process, + ScopedPlatformHandle channel, + const ProcessErrorCallback& error_callback = ProcessErrorCallback()); + + private: + // A GUID representing a potential new process to be connected to this one. + const std::string process_token_; + + // Indicates whether this object has been used to create new message pipes. + bool has_message_pipes_ = false; + + // Indicates whether Connect() has been called yet. + bool connected_ = false; + + DISALLOW_COPY_AND_ASSIGN(PendingProcessConnection); +}; + +} // namespace edk +} // namespace mojo + +#endif // MOJO_EDK_EMBEDDER_PENDING_PROCESS_CONNECTION_H_
diff --git a/mojo/edk/test/multiprocess_test_helper.cc b/mojo/edk/test/multiprocess_test_helper.cc index f5f9ce61a1..8eaccf0 100644 --- a/mojo/edk/test/multiprocess_test_helper.cc +++ b/mojo/edk/test/multiprocess_test_helper.cc
@@ -26,6 +26,7 @@ #include "mojo/edk/embedder/embedder.h" #include "mojo/edk/embedder/named_platform_handle.h" #include "mojo/edk/embedder/named_platform_handle_utils.h" +#include "mojo/edk/embedder/pending_process_connection.h" #include "mojo/edk/embedder/platform_channel_pair.h" #include "testing/gtest/include/gtest/gtest.h" @@ -114,11 +115,6 @@ command_line.AppendSwitchNative(kMojoNamedPipeName, named_pipe.name); } - std::string pipe_token = mojo::edk::GenerateRandomToken(); - if (launch_type == LaunchType::CHILD || - launch_type == LaunchType::NAMED_CHILD) - command_line.AppendSwitchASCII(kMojoPrimordialPipeToken, pipe_token); - if (!switch_string.empty()) { CHECK(!command_line.HasSwitch(switch_string)); if (!switch_value.empty()) @@ -151,11 +147,13 @@ server_handle = CreateServerHandle(named_pipe); } + PendingProcessConnection process; ScopedMessagePipeHandle pipe; - std::string child_token = mojo::edk::GenerateRandomToken(); if (launch_type == LaunchType::CHILD || launch_type == LaunchType::NAMED_CHILD) { - pipe = CreateParentMessagePipe(pipe_token, child_token); + std::string pipe_token; + pipe = process.CreateMessagePipe(&pipe_token); + command_line.AppendSwitchASCII(kMojoPrimordialPipeToken, pipe_token); } else if (launch_type == LaunchType::PEER || launch_type == LaunchType::NAMED_PEER) { peer_token_ = mojo::edk::GenerateRandomToken(); @@ -170,8 +168,8 @@ if (launch_type == LaunchType::CHILD || launch_type == LaunchType::NAMED_CHILD) { DCHECK(server_handle.is_valid()); - ChildProcessLaunched(test_child_.Handle(), std::move(server_handle), - child_token, process_error_callback_); + process.Connect(test_child_.Handle(), std::move(server_handle), + process_error_callback_); } CHECK(test_child_.IsValid());
diff --git a/mojo/public/cpp/bindings/lib/multiplex_router.cc b/mojo/public/cpp/bindings/lib/multiplex_router.cc index 2d8c53e..e188c4b 100644 --- a/mojo/public/cpp/bindings/lib/multiplex_router.cc +++ b/mojo/public/cpp/bindings/lib/multiplex_router.cc
@@ -174,26 +174,23 @@ void OnHandleReady(MojoResult result) { DCHECK(task_runner_->BelongsToCurrentThread()); - scoped_refptr<InterfaceEndpoint> self_protector(this); scoped_refptr<MultiplexRouter> router_protector(router_); // Because we never close |sync_message_event_{sender,receiver}_| before // destruction or set a deadline, |result| should always be MOJO_RESULT_OK. DCHECK_EQ(MOJO_RESULT_OK, result); - bool reset_sync_watcher = false; - { - MayAutoLock locker(router_->lock_.get()); - bool more_to_process = router_->ProcessFirstSyncMessageForEndpoint(id_); + MayAutoLock locker(router_->lock_.get()); + scoped_refptr<InterfaceEndpoint> self_protector(this); - if (!more_to_process) - ResetSyncMessageSignal(); + bool more_to_process = router_->ProcessFirstSyncMessageForEndpoint(id_); - // Currently there are no queued sync messages and the peer has closed so - // there won't be incoming sync messages in the future. - reset_sync_watcher = !more_to_process && peer_closed_; - } - if (reset_sync_watcher) { + if (!more_to_process) + ResetSyncMessageSignal(); + + // Currently there are no queued sync messages and the peer has closed so + // there won't be incoming sync messages in the future. + if (!more_to_process && peer_closed_) { // If a SyncWatch() call (or multiple ones) of this interface endpoint is // on the call stack, resetting the sync watcher will allow it to exit // when the call stack unwinds to that frame.
diff --git a/net/base/host_port_pair.cc b/net/base/host_port_pair.cc index 68fb0b6..b40cb7c 100644 --- a/net/base/host_port_pair.cc +++ b/net/base/host_port_pair.cc
@@ -49,10 +49,6 @@ return host_port_pair; } -size_t HostPortPair::EstimateMemoryUsage(const HostPortPair& pair) { - return base::trace_event::EstimateMemoryUsage(pair.host()); -} - std::string HostPortPair::ToString() const { std::string ret(HostForURL()); ret += ':'; @@ -79,4 +75,8 @@ return host_; } +size_t HostPortPair::EstimateMemoryUsage() const { + return base::trace_event::EstimateMemoryUsage(host_); +} + } // namespace net
diff --git a/net/base/host_port_pair.h b/net/base/host_port_pair.h index ebb2dd1..a5ee6bd 100644 --- a/net/base/host_port_pair.h +++ b/net/base/host_port_pair.h
@@ -34,9 +34,6 @@ // ToString(). static HostPortPair FromString(const std::string& str); - // Returns the estimate of dynamically allocated memory in bytes. - static size_t EstimateMemoryUsage(const HostPortPair& pair); - // TODO(willchan): Define a functor instead. // Comparator function so this can be placed in a std::map. bool operator<(const HostPortPair& other) const { @@ -71,6 +68,9 @@ // Returns |host_|, adding IPv6 brackets if needed. std::string HostForURL() const; + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; + private: // If |host_| represents an IPv6 address, this string will not contain // brackets around the address.
diff --git a/net/http2/hpack/decoder/hpack_decoder_string_buffer.cc b/net/http2/hpack/decoder/hpack_decoder_string_buffer.cc index e38f42db..e00c155b 100644 --- a/net/http2/hpack/decoder/hpack_decoder_string_buffer.cc +++ b/net/http2/hpack/decoder/hpack_decoder_string_buffer.cc
@@ -7,6 +7,7 @@ #include <utility> #include "base/logging.h" +#include "base/trace_event/memory_usage_estimator.h" #include "net/http2/tools/http2_bug_tracker.h" using base::StringPiece; @@ -224,6 +225,10 @@ out << "}"; } +size_t HpackDecoderStringBuffer::EstimateMemoryUsage() const { + return base::trace_event::EstimateMemoryUsage(buffer_); +} + std::ostream& operator<<(std::ostream& out, const HpackDecoderStringBuffer& v) { v.OutputDebugStringTo(out); return out;
diff --git a/net/http2/hpack/decoder/hpack_decoder_string_buffer.h b/net/http2/hpack/decoder/hpack_decoder_string_buffer.h index 8544941..2f60068 100644 --- a/net/http2/hpack/decoder/hpack_decoder_string_buffer.h +++ b/net/http2/hpack/decoder/hpack_decoder_string_buffer.h
@@ -62,6 +62,9 @@ Backing backing_for_testing() const { return backing_; } void OutputDebugStringTo(std::ostream& out) const; + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; + private: // Storage for the string being buffered, if buffering is necessary // (e.g. if Huffman encoded, buffer_ is storage for the decoded string).
diff --git a/net/http2/hpack/decoder/hpack_whole_entry_buffer.cc b/net/http2/hpack/decoder/hpack_whole_entry_buffer.cc index 8bb212f..429938f 100644 --- a/net/http2/hpack/decoder/hpack_whole_entry_buffer.cc +++ b/net/http2/hpack/decoder/hpack_whole_entry_buffer.cc
@@ -5,6 +5,7 @@ #include "net/http2/hpack/decoder/hpack_whole_entry_buffer.h" #include "base/logging.h" +#include "base/trace_event/memory_usage_estimator.h" using base::StringPiece; @@ -32,6 +33,11 @@ value_.BufferStringIfUnbuffered(); } +size_t HpackWholeEntryBuffer::EstimateMemoryUsage() const { + return base::trace_event::EstimateMemoryUsage(name_) + + base::trace_event::EstimateMemoryUsage(value_); +} + void HpackWholeEntryBuffer::OnIndexedHeader(size_t index) { DVLOG(2) << "HpackWholeEntryBuffer::OnIndexedHeader: index=" << index; listener_->OnIndexedHeader(index);
diff --git a/net/http2/hpack/decoder/hpack_whole_entry_buffer.h b/net/http2/hpack/decoder/hpack_whole_entry_buffer.h index 8ab5d693..d7f7e84 100644 --- a/net/http2/hpack/decoder/hpack_whole_entry_buffer.h +++ b/net/http2/hpack/decoder/hpack_whole_entry_buffer.h
@@ -60,6 +60,9 @@ // no further callbacks will be made to the listener. bool error_detected() const { return error_detected_; } + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; + // Implement the HpackEntryDecoderListener methods. void OnIndexedHeader(size_t index) override;
diff --git a/net/http2/hpack/decoder/http2_hpack_decoder.cc b/net/http2/hpack/decoder/http2_hpack_decoder.cc index 390d8287..607bec1 100644 --- a/net/http2/hpack/decoder/http2_hpack_decoder.cc +++ b/net/http2/hpack/decoder/http2_hpack_decoder.cc
@@ -5,6 +5,7 @@ #include "net/http2/hpack/decoder/http2_hpack_decoder.h" #include "base/logging.h" +#include "base/trace_event/memory_usage_estimator.h" #include "net/http2/decoder/decode_status.h" using base::StringPiece; @@ -116,6 +117,10 @@ return error_detected_; } +size_t Http2HpackDecoder::EstimateMemoryUsage() const { + return base::trace_event::EstimateMemoryUsage(entry_buffer_); +} + void Http2HpackDecoder::ReportError(StringPiece error_message) { DVLOG(3) << "Http2HpackDecoder::ReportError is new=" << (!error_detected_ ? "true" : "false")
diff --git a/net/http2/hpack/decoder/http2_hpack_decoder.h b/net/http2/hpack/decoder/http2_hpack_decoder.h index fff1320..d053c3a 100644 --- a/net/http2/hpack/decoder/http2_hpack_decoder.h +++ b/net/http2/hpack/decoder/http2_hpack_decoder.h
@@ -95,6 +95,9 @@ // Was an error detected? bool error_detected(); + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; + private: friend class test::Http2HpackDecoderPeer;
diff --git a/net/proxy/proxy_server.cc b/net/proxy/proxy_server.cc index 76fa0d6..ed81ebb 100644 --- a/net/proxy/proxy_server.cc +++ b/net/proxy/proxy_server.cc
@@ -7,6 +7,7 @@ #include <algorithm> #include "base/strings/string_util.h" +#include "base/trace_event/memory_usage_estimator.h" #include "net/base/url_util.h" #include "net/http/http_util.h" @@ -209,6 +210,10 @@ return GetSchemeFromURIInternal(scheme); } +size_t ProxyServer::EstimateMemoryUsage() const { + return base::trace_event::EstimateMemoryUsage(host_port_pair_); +} + // static ProxyServer ProxyServer::FromSchemeHostAndPort( Scheme scheme,
diff --git a/net/proxy/proxy_server.h b/net/proxy/proxy_server.h index 12ec217..bc63164 100644 --- a/net/proxy/proxy_server.h +++ b/net/proxy/proxy_server.h
@@ -155,6 +155,9 @@ std::tie(other.scheme_, other.host_port_pair_); } + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; + private: // Creates a ProxyServer given a scheme, and host/port string. If parsing the // host/port string fails, the returned instance will be invalid.
diff --git a/net/quic/chromium/quic_stream_factory.cc b/net/quic/chromium/quic_stream_factory.cc index 58ce8e4..60a70d08 100644 --- a/net/quic/chromium/quic_stream_factory.cc +++ b/net/quic/chromium/quic_stream_factory.cc
@@ -207,7 +207,7 @@ // Returns the estimate of dynamically allocated memory of |server_id|. size_t EstimateServerIdMemoryUsage(const QuicServerId& server_id) { - return HostPortPair::EstimateMemoryUsage(server_id.host_port_pair()); + return base::trace_event::EstimateMemoryUsage(server_id.host_port_pair()); } } // namespace @@ -1093,7 +1093,7 @@ } size_t QuicStreamFactory::QuicSessionKey::EstimateMemoryUsage() const { - return HostPortPair::EstimateMemoryUsage(destination_) + + return base::trace_event::EstimateMemoryUsage(destination_) + EstimateServerIdMemoryUsage(server_id_); }
diff --git a/net/spdy/buffered_spdy_framer.cc b/net/spdy/buffered_spdy_framer.cc index 2ca4b24..332b06b 100644 --- a/net/spdy/buffered_spdy_framer.cc +++ b/net/spdy/buffered_spdy_framer.cc
@@ -10,6 +10,7 @@ #include "base/logging.h" #include "base/memory/ptr_util.h" #include "base/strings/string_util.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" namespace net { @@ -306,4 +307,15 @@ return spdy_framer_.GetHighestPriority(); } +size_t BufferedSpdyFramer::EstimateMemoryUsage() const { + return SpdyEstimateMemoryUsage(spdy_framer_) + + SpdyEstimateMemoryUsage(coalescer_) + + SpdyEstimateMemoryUsage(control_frame_fields_) + + SpdyEstimateMemoryUsage(goaway_fields_); +} + +size_t BufferedSpdyFramer::GoAwayFields::EstimateMemoryUsage() const { + return SpdyEstimateMemoryUsage(debug_data); +} + } // namespace net
diff --git a/net/spdy/buffered_spdy_framer.h b/net/spdy/buffered_spdy_framer.h index 7ab4fa3..fa0ead923 100644 --- a/net/spdy/buffered_spdy_framer.h +++ b/net/spdy/buffered_spdy_framer.h
@@ -230,6 +230,9 @@ int frames_received() const { return frames_received_; } + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; + private: SpdyFramer spdy_framer_; BufferedSpdyFramerVisitorInterface* visitor_; @@ -258,6 +261,9 @@ SpdyStreamId last_accepted_stream_id; SpdyErrorCode error_code; std::string debug_data; + + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; }; std::unique_ptr<GoAwayFields> goaway_fields_;
diff --git a/net/spdy/header_coalescer.cc b/net/spdy/header_coalescer.cc index 24bd9cb..497c0799 100644 --- a/net/spdy/header_coalescer.cc +++ b/net/spdy/header_coalescer.cc
@@ -7,6 +7,7 @@ #include <utility> #include "base/strings/string_util.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" namespace net { @@ -70,4 +71,8 @@ return std::move(headers_); } +size_t HeaderCoalescer::EstimateMemoryUsage() const { + return SpdyEstimateMemoryUsage(headers_); +} + } // namespace net
diff --git a/net/spdy/header_coalescer.h b/net/spdy/header_coalescer.h index fe30a28..f615139 100644 --- a/net/spdy/header_coalescer.h +++ b/net/spdy/header_coalescer.h
@@ -26,6 +26,9 @@ SpdyHeaderBlock release_headers(); bool error_seen() const { return error_seen_; } + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; + private: SpdyHeaderBlock headers_; bool headers_valid_ = true;
diff --git a/net/spdy/hpack/hpack_decoder.cc b/net/spdy/hpack/hpack_decoder.cc index 575a5c1..78e1f181 100644 --- a/net/spdy/hpack/hpack_decoder.cc +++ b/net/spdy/hpack/hpack_decoder.cc
@@ -9,6 +9,7 @@ #include "base/logging.h" #include "net/spdy/hpack/hpack_constants.h" #include "net/spdy/hpack/hpack_entry.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" #include "net/spdy/spdy_flags.h" namespace net { @@ -116,6 +117,14 @@ max_decode_buffer_size_bytes_ = max_decode_buffer_size_bytes; } +size_t HpackDecoder::EstimateMemoryUsage() const { + return SpdyEstimateMemoryUsage(header_table_) + + SpdyEstimateMemoryUsage(headers_block_buffer_) + + SpdyEstimateMemoryUsage(decoded_block_) + + SpdyEstimateMemoryUsage(key_buffer_) + + SpdyEstimateMemoryUsage(value_buffer_); +} + bool HpackDecoder::HandleHeaderRepresentation(StringPiece name, StringPiece value) { size_updates_allowed_ = false;
diff --git a/net/spdy/hpack/hpack_decoder.h b/net/spdy/hpack/hpack_decoder.h index 172892f..76d18b7 100644 --- a/net/spdy/hpack/hpack_decoder.h +++ b/net/spdy/hpack/hpack_decoder.h
@@ -78,6 +78,8 @@ void set_max_decode_buffer_size_bytes( size_t max_decode_buffer_size_bytes) override; + size_t EstimateMemoryUsage() const override; + private: // Adds the header representation to |decoded_block_|, applying the // following rules:
diff --git a/net/spdy/hpack/hpack_decoder2.cc b/net/spdy/hpack/hpack_decoder2.cc index 03b1c2e..14ff94e990f 100644 --- a/net/spdy/hpack/hpack_decoder2.cc +++ b/net/spdy/hpack/hpack_decoder2.cc
@@ -12,6 +12,7 @@ #include "net/http2/decoder/decode_buffer.h" #include "net/http2/decoder/decode_status.h" #include "net/spdy/hpack/hpack_entry.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" using base::StringPiece; @@ -159,6 +160,12 @@ max_decode_buffer_size_bytes_ = max_decode_buffer_size_bytes; } +size_t HpackDecoder2::EstimateMemoryUsage() const { + return SpdyEstimateMemoryUsage(header_table_) + + SpdyEstimateMemoryUsage(decoded_block_) + + SpdyEstimateMemoryUsage(name_) + SpdyEstimateMemoryUsage(value_); +} + void HpackDecoder2::OnIndexedHeader(size_t index) { DVLOG(2) << "HpackDecoder2::OnIndexedHeader: index=" << index; DCHECK(!error_detected_);
diff --git a/net/spdy/hpack/hpack_decoder2.h b/net/spdy/hpack/hpack_decoder2.h index 6dd207c..614ac01 100644 --- a/net/spdy/hpack/hpack_decoder2.h +++ b/net/spdy/hpack/hpack_decoder2.h
@@ -56,6 +56,7 @@ override; void set_max_decode_buffer_size_bytes( size_t max_decode_buffer_size_bytes) override; + size_t EstimateMemoryUsage() const override; protected: // Override the HpackEntryDecoderListener methods:
diff --git a/net/spdy/hpack/hpack_decoder3.cc b/net/spdy/hpack/hpack_decoder3.cc index 5c6fbb8..6929980 100644 --- a/net/spdy/hpack/hpack_decoder3.cc +++ b/net/spdy/hpack/hpack_decoder3.cc
@@ -7,6 +7,7 @@ #include "base/logging.h" #include "net/http2/decoder/decode_buffer.h" #include "net/http2/decoder/decode_status.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" using base::StringPiece; @@ -107,6 +108,10 @@ hpack_decoder_.set_max_string_size_bytes(max_decode_buffer_size_bytes); } +size_t HpackDecoder3::EstimateMemoryUsage() const { + return SpdyEstimateMemoryUsage(hpack_decoder_); +} + HpackDecoder3::ListenerAdapter::ListenerAdapter() : handler_(nullptr) {} HpackDecoder3::ListenerAdapter::~ListenerAdapter() {}
diff --git a/net/spdy/hpack/hpack_decoder3.h b/net/spdy/hpack/hpack_decoder3.h index 0d64251..a83fdf2f 100644 --- a/net/spdy/hpack/hpack_decoder3.h +++ b/net/spdy/hpack/hpack_decoder3.h
@@ -50,6 +50,7 @@ override; void set_max_decode_buffer_size_bytes( size_t max_decode_buffer_size_bytes) override; + size_t EstimateMemoryUsage() const override; private: class NET_EXPORT_PRIVATE ListenerAdapter
diff --git a/net/spdy/hpack/hpack_decoder_interface.h b/net/spdy/hpack/hpack_decoder_interface.h index 1103e31..375e221 100644 --- a/net/spdy/hpack/hpack_decoder_interface.h +++ b/net/spdy/hpack/hpack_decoder_interface.h
@@ -66,6 +66,9 @@ // of individual transport buffers. virtual void set_max_decode_buffer_size_bytes( size_t max_decode_buffer_size_bytes) = 0; + + // Returns the estimate of dynamically allocated memory in bytes. + virtual size_t EstimateMemoryUsage() const = 0; }; } // namespace net
diff --git a/net/spdy/hpack/hpack_encoder.cc b/net/spdy/hpack/hpack_encoder.cc index 0ec5e8f..de04d74 100644 --- a/net/spdy/hpack/hpack_encoder.cc +++ b/net/spdy/hpack/hpack_encoder.cc
@@ -13,6 +13,7 @@ #include "net/spdy/hpack/hpack_header_table.h" #include "net/spdy/hpack/hpack_huffman_table.h" #include "net/spdy/hpack/hpack_output_stream.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" namespace net { @@ -132,6 +133,12 @@ should_emit_table_size_ = true; } +size_t HpackEncoder::EstimateMemoryUsage() const { + // |huffman_table_| is a singleton. It's accounted for in spdy_session_pool.cc + return SpdyEstimateMemoryUsage(header_table_) + + SpdyEstimateMemoryUsage(output_stream_); +} + void HpackEncoder::EncodeRepresentations(RepresentationIterator* iter, string* output) { MaybeEmitTableSize();
diff --git a/net/spdy/hpack/hpack_encoder.h b/net/spdy/hpack/hpack_encoder.h index f2d95e3..0d5f2d5 100644 --- a/net/spdy/hpack/hpack_encoder.h +++ b/net/spdy/hpack/hpack_encoder.h
@@ -101,6 +101,9 @@ void DisableCompression() { enable_compression_ = false; } + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; + private: friend class test::HpackEncoderPeer;
diff --git a/net/spdy/hpack/hpack_huffman_table.cc b/net/spdy/hpack/hpack_huffman_table.cc index 0e3ca1b..2d361db 100644 --- a/net/spdy/hpack/hpack_huffman_table.cc +++ b/net/spdy/hpack/hpack_huffman_table.cc
@@ -12,6 +12,7 @@ #include "base/numerics/safe_conversions.h" #include "net/spdy/hpack/hpack_input_stream.h" #include "net/spdy/hpack/hpack_output_stream.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" namespace net { @@ -318,4 +319,11 @@ return false; } +size_t HpackHuffmanTable::EstimateMemoryUsage() const { + return SpdyEstimateMemoryUsage(decode_tables_) + + SpdyEstimateMemoryUsage(decode_entries_) + + SpdyEstimateMemoryUsage(code_by_id_) + + SpdyEstimateMemoryUsage(length_by_id_); +} + } // namespace net
diff --git a/net/spdy/hpack/hpack_huffman_table.h b/net/spdy/hpack/hpack_huffman_table.h index 96c3950..386e2aa 100644 --- a/net/spdy/hpack/hpack_huffman_table.h +++ b/net/spdy/hpack/hpack_huffman_table.h
@@ -94,6 +94,9 @@ bool GenericDecodeString(HpackInputStream* in, std::string* out) const; + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; + private: // Expects symbols ordered on length & ID ascending. void BuildDecodeTables(const std::vector<Symbol>& symbols);
diff --git a/net/spdy/hpack/hpack_output_stream.cc b/net/spdy/hpack/hpack_output_stream.cc index 6337d7d..a93965d 100644 --- a/net/spdy/hpack/hpack_output_stream.cc +++ b/net/spdy/hpack/hpack_output_stream.cc
@@ -7,6 +7,7 @@ #include <utility> #include "base/logging.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" namespace net { @@ -92,4 +93,8 @@ } } +size_t HpackOutputStream::EstimateMemoryUsage() const { + return SpdyEstimateMemoryUsage(buffer_); +} + } // namespace net
diff --git a/net/spdy/hpack/hpack_output_stream.h b/net/spdy/hpack/hpack_output_stream.h index 41dfd7d..965cea7 100644 --- a/net/spdy/hpack/hpack_output_stream.h +++ b/net/spdy/hpack/hpack_output_stream.h
@@ -59,6 +59,9 @@ // Size in bytes of stream's internal buffer. size_t size() const { return buffer_.size(); } + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; + private: // The internal bit buffer. std::string buffer_;
diff --git a/net/spdy/hpack/hpack_static_table.cc b/net/spdy/hpack/hpack_static_table.cc index 5588ebe..626bd92 100644 --- a/net/spdy/hpack/hpack_static_table.cc +++ b/net/spdy/hpack/hpack_static_table.cc
@@ -7,6 +7,7 @@ #include "base/logging.h" #include "net/spdy/hpack/hpack_constants.h" #include "net/spdy/hpack/hpack_entry.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" namespace net { @@ -39,4 +40,10 @@ return !static_entries_.empty(); } +size_t HpackStaticTable::EstimateMemoryUsage() const { + return SpdyEstimateMemoryUsage(static_entries_) + + SpdyEstimateMemoryUsage(static_index_) + + SpdyEstimateMemoryUsage(static_name_index_); +} + } // namespace net
diff --git a/net/spdy/hpack/hpack_static_table.h b/net/spdy/hpack/hpack_static_table.h index 9239134..328ad29 100644 --- a/net/spdy/hpack/hpack_static_table.h +++ b/net/spdy/hpack/hpack_static_table.h
@@ -42,6 +42,9 @@ return static_name_index_; } + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; + private: HpackHeaderTable::EntryTable static_entries_; HpackHeaderTable::UnorderedEntrySet static_index_;
diff --git a/net/spdy/http2_frame_decoder_adapter.cc b/net/spdy/http2_frame_decoder_adapter.cc index 475ef17..64d6b6d 100644 --- a/net/spdy/http2_frame_decoder_adapter.cc +++ b/net/spdy/http2_frame_decoder_adapter.cc
@@ -28,6 +28,7 @@ #include "net/http2/http2_structures.h" #include "net/spdy/hpack/hpack_decoder_interface.h" #include "net/spdy/hpack/hpack_header_table.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" #include "net/spdy/spdy_alt_svc_wire_format.h" #include "net/spdy/spdy_bug_tracker.h" #include "net/spdy/spdy_frame_builder.h" @@ -143,6 +144,12 @@ return latched_probable_http_response_; } + size_t EstimateMemoryUsage() const override { + // Skip |frame_decoder_|, |frame_header_| and |hpack_first_frame_header_| as + // they don't allocate. + return SpdyEstimateMemoryUsage(alt_svc_origin_) + + SpdyEstimateMemoryUsage(alt_svc_value_); + } // =========================================================================== // Implementations of the methods declared by Http2FrameDecoderListener.
diff --git a/net/spdy/http2_priority_dependencies.cc b/net/spdy/http2_priority_dependencies.cc index 9cbfba07..b4731647 100644 --- a/net/spdy/http2_priority_dependencies.cc +++ b/net/spdy/http2_priority_dependencies.cc
@@ -3,6 +3,7 @@ // found in the LICENSE file. #include "net/spdy/http2_priority_dependencies.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" namespace net { @@ -157,4 +158,10 @@ entry_by_stream_id_.erase(emit); } +size_t Http2PriorityDependencies::EstimateMemoryUsage() const { + return SpdyEstimateMemoryUsage(id_priority_lists_); + // TODO(xunjieli): https://crbug.com/690015. Include |entry_by_stream_id_| + // when memory_usage_estimator.h supports std::list::iterator. +} + } // namespace net
diff --git a/net/spdy/http2_priority_dependencies.h b/net/spdy/http2_priority_dependencies.h index d356a79..5a5aed3 100644 --- a/net/spdy/http2_priority_dependencies.h +++ b/net/spdy/http2_priority_dependencies.h
@@ -47,6 +47,9 @@ std::vector<DependencyUpdate> OnStreamUpdate(SpdyStreamId id, SpdyPriority new_priority); + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; + private: // The requirements for the internal data structure for this class are: // a) Constant time insertion of entries at the end of the list,
diff --git a/net/spdy/spdy_buffer.cc b/net/spdy/spdy_buffer.cc index 28e807d..1c2d6ede 100644 --- a/net/spdy/spdy_buffer.cc +++ b/net/spdy/spdy_buffer.cc
@@ -11,6 +11,7 @@ #include "base/logging.h" #include "base/macros.h" #include "net/base/io_buffer.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" #include "net/spdy/spdy_protocol.h" namespace net { @@ -97,6 +98,11 @@ return new SharedFrameIOBuffer(shared_frame_, offset_); } +size_t SpdyBuffer::EstimateMemoryUsage() const { + // TODO(xunjieli): Estimate |consume_callbacks_|. https://crbug.com/669108. + return SpdyEstimateMemoryUsage(shared_frame_->data); +} + void SpdyBuffer::ConsumeHelper(size_t consume_size, ConsumeSource consume_source) { DCHECK_GE(consume_size, 1u);
diff --git a/net/spdy/spdy_buffer.h b/net/spdy/spdy_buffer.h index 0d9ffbf..c2271a5 100644 --- a/net/spdy/spdy_buffer.h +++ b/net/spdy/spdy_buffer.h
@@ -83,6 +83,9 @@ // http://crbug.com/249725 .) IOBuffer* GetIOBufferForRemainingData(); + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; + private: void ConsumeHelper(size_t consume_size, ConsumeSource consume_source);
diff --git a/net/spdy/spdy_buffer_producer.cc b/net/spdy/spdy_buffer_producer.cc index 46d766b..039638c 100644 --- a/net/spdy/spdy_buffer_producer.cc +++ b/net/spdy/spdy_buffer_producer.cc
@@ -7,6 +7,7 @@ #include <utility> #include "base/logging.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" #include "net/spdy/spdy_buffer.h" #include "net/spdy/spdy_protocol.h" @@ -26,4 +27,8 @@ return std::move(buffer_); } +size_t SimpleBufferProducer::EstimateMemoryUsage() const { + return SpdyEstimateMemoryUsage(buffer_); +} + } // namespace net
diff --git a/net/spdy/spdy_buffer_producer.h b/net/spdy/spdy_buffer_producer.h index 8d09f7b..5b18c187 100644 --- a/net/spdy/spdy_buffer_producer.h +++ b/net/spdy/spdy_buffer_producer.h
@@ -27,6 +27,9 @@ virtual ~SpdyBufferProducer(); + // Returns the estimate of dynamically allocated memory in bytes. + virtual size_t EstimateMemoryUsage() const = 0; + private: DISALLOW_COPY_AND_ASSIGN(SpdyBufferProducer); }; @@ -40,6 +43,8 @@ std::unique_ptr<SpdyBuffer> ProduceBuffer() override; + size_t EstimateMemoryUsage() const override; + private: std::unique_ptr<SpdyBuffer> buffer_;
diff --git a/net/spdy/spdy_framer.cc b/net/spdy/spdy_framer.cc index 85135d56..90200d8 100644 --- a/net/spdy/spdy_framer.cc +++ b/net/spdy/spdy_framer.cc
@@ -28,6 +28,7 @@ #include "net/spdy/hpack/hpack_decoder2.h" #include "net/spdy/hpack/hpack_decoder3.h" #include "net/spdy/http2_frame_decoder_adapter.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" #include "net/spdy/spdy_bitmasks.h" #include "net/spdy/spdy_bug_tracker.h" #include "net/spdy/spdy_flags.h" @@ -563,6 +564,10 @@ len_ = 0; } +size_t SpdyFramer::CharBuffer::EstimateMemoryUsage() const { + return capacity_; +} + SpdyFramer::SpdySettingsScratch::SpdySettingsScratch() : buffer(8), last_setting_id(-1) {} @@ -571,6 +576,10 @@ last_setting_id = -1; } +size_t SpdyFramer::SpdySettingsScratch::EstimateMemoryUsage() const { + return SpdyEstimateMemoryUsage(buffer); +} + SpdyFrameType SpdyFramer::ValidateFrameHeader(bool is_control_frame, uint8_t frame_type_field, size_t payload_length_field) { @@ -2352,6 +2361,15 @@ GetHpackEncoder()->SetHeaderTableDebugVisitor(std::move(visitor)); } +size_t SpdyFramer::EstimateMemoryUsage() const { + return SpdyEstimateMemoryUsage(current_frame_buffer_) + + SpdyEstimateMemoryUsage(settings_scratch_) + + SpdyEstimateMemoryUsage(altsvc_scratch_) + + SpdyEstimateMemoryUsage(hpack_encoder_) + + SpdyEstimateMemoryUsage(hpack_decoder_) + + SpdyEstimateMemoryUsage(decoder_adapter_); +} + void SpdyFramer::UpdateHeaderEncoderTableSize(uint32_t value) { GetHpackEncoder()->ApplyHeaderTableSizeSetting(value); }
diff --git a/net/spdy/spdy_framer.h b/net/spdy/spdy_framer.h index 9bbfd2c..59f35f1 100644 --- a/net/spdy/spdy_framer.h +++ b/net/spdy/spdy_framer.h
@@ -528,6 +528,9 @@ return GetHpackDecoder(); } + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; + protected: friend class BufferedSpdyFramer; friend class HttpNetworkLayer; // This is temporary for the server. @@ -553,6 +556,8 @@ const char* data() const { return buffer_.get(); } size_t len() const { return len_; } + size_t EstimateMemoryUsage() const; + private: std::unique_ptr<char[]> buffer_; size_t capacity_; @@ -563,6 +568,7 @@ struct SpdySettingsScratch { SpdySettingsScratch(); void Reset(); + size_t EstimateMemoryUsage() const; // Buffer contains up to one complete key/value pair. CharBuffer buffer;
diff --git a/net/spdy/spdy_framer_decoder_adapter.cc b/net/spdy/spdy_framer_decoder_adapter.cc index 6343069..603f2a0c 100644 --- a/net/spdy/spdy_framer_decoder_adapter.cc +++ b/net/spdy/spdy_framer_decoder_adapter.cc
@@ -11,6 +11,7 @@ #include "base/format_macros.h" #include "base/logging.h" #include "base/strings/stringprintf.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" #if defined(COMPILER_GCC) #define PRETTY_THIS base::StringPrintf("%s@%p ", __PRETTY_FUNCTION__, this) @@ -231,6 +232,10 @@ bool probable_http_response() const override { return framer_.probable_http_response(); } + size_t EstimateMemoryUsage() const override { + // Skip |visitor_adapter_| because it doesn't allocate. + return SpdyEstimateMemoryUsage(framer_); + } private: SpdyFramer framer_;
diff --git a/net/spdy/spdy_framer_decoder_adapter.h b/net/spdy/spdy_framer_decoder_adapter.h index 293b6c3..84f709dd 100644 --- a/net/spdy/spdy_framer_decoder_adapter.h +++ b/net/spdy/spdy_framer_decoder_adapter.h
@@ -75,6 +75,9 @@ // has responded with an HTTP/1.1 (or earlier) response. virtual bool probable_http_response() const = 0; + // Returns the estimate of dynamically allocated memory in bytes. + virtual size_t EstimateMemoryUsage() const = 0; + private: SpdyFramerVisitorInterface* visitor_ = nullptr; SpdyFramerDebugVisitorInterface* debug_visitor_ = nullptr;
diff --git a/net/spdy/spdy_header_block.cc b/net/spdy/spdy_header_block.cc index 6cbd6ba6..a51532cf 100644 --- a/net/spdy/spdy_header_block.cc +++ b/net/spdy/spdy_header_block.cc
@@ -15,6 +15,7 @@ #include "net/base/arena.h" #include "net/http/http_log_util.h" #include "net/log/net_log_capture_mode.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" using base::StringPiece; using std::dec; @@ -89,6 +90,11 @@ size_t bytes_allocated() const { return arena_.status().bytes_allocated(); } + // TODO(xunjieli): https://crbug.com/669108. Merge this with bytes_allocated() + size_t EstimateMemoryUsage() const { + return arena_.status().bytes_allocated(); + } + private: UnsafeArena arena_; }; @@ -299,6 +305,12 @@ iter->second.Append(GetStorage()->Write(value)); } +size_t SpdyHeaderBlock::EstimateMemoryUsage() const { + // TODO(xunjieli): https://crbug.com/669108. Also include |block_| when EMU() + // supports linked_hash_map. + return SpdyEstimateMemoryUsage(storage_); +} + void SpdyHeaderBlock::AppendHeader(const StringPiece key, const StringPiece value) { auto storage = GetStorage();
diff --git a/net/spdy/spdy_header_block.h b/net/spdy/spdy_header_block.h index fe8827f5..e09b33d 100644 --- a/net/spdy/spdy_header_block.h +++ b/net/spdy/spdy_header_block.h
@@ -218,6 +218,9 @@ bool valid_; }; + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; + private: friend class test::SpdyHeaderBlockPeer;
diff --git a/net/spdy/spdy_protocol.h b/net/spdy/spdy_protocol.h index 3c2187c..523ad57 100644 --- a/net/spdy/spdy_protocol.h +++ b/net/spdy/spdy_protocol.h
@@ -862,6 +862,9 @@ return buffer; } + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const { return owns_buffer_ ? size_ : 0; } + protected: char* frame_;
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc index 2e3a31a..aa8397a 100644 --- a/net/spdy/spdy_session.cc +++ b/net/spdy/spdy_session.cc
@@ -46,6 +46,7 @@ #include "net/log/net_log_with_source.h" #include "net/proxy/proxy_server.h" #include "net/socket/ssl_client_socket.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" #include "net/spdy/spdy_buffer_producer.h" #include "net/spdy/spdy_frame_builder.h" #include "net/spdy/spdy_http_utils.h" @@ -582,6 +583,10 @@ return stream; } +size_t SpdyStreamRequest::EstimateMemoryUsage() const { + return base::trace_event::EstimateItemMemoryUsage(url_); +} + void SpdyStreamRequest::OnRequestCompleteSuccess( const base::WeakPtr<SpdyStream>& stream) { DCHECK(session_); @@ -660,6 +665,11 @@ stream_id, creation_time))); } +size_t SpdySession::UnclaimedPushedStreamContainer::EstimateMemoryUsage() + const { + return SpdyEstimateMemoryUsage(streams_); +} + // static bool SpdySession::CanPool(TransportSecurityState* transport_security_state, const SSLInfo& ssl_info, @@ -1349,10 +1359,27 @@ return false; } -void SpdySession::DumpMemoryStats(StreamSocket::SocketMemoryStats* stats, - bool* is_session_active) const { +size_t SpdySession::DumpMemoryStats(StreamSocket::SocketMemoryStats* stats, + bool* is_session_active) const { + // TODO(xunjieli): Include |pending_create_stream_queues_| when WeakPtr is + // supported in memory_usage_estimator.h. *is_session_active = is_active(); connection_->DumpMemoryStats(stats); + + // |connection_| is estimated in stats->total_size. |read_buffer_| is + // estimated in kReadBufferSize. TODO(xunjieli): Make them use EMU(). + return stats->total_size + kReadBufferSize + + SpdyEstimateMemoryUsage(spdy_session_key_) + + SpdyEstimateMemoryUsage(pooled_aliases_) + + SpdyEstimateMemoryUsage(active_streams_) + + SpdyEstimateMemoryUsage(unclaimed_pushed_streams_) + + SpdyEstimateMemoryUsage(created_streams_) + + SpdyEstimateMemoryUsage(write_queue_) + + SpdyEstimateMemoryUsage(in_flight_write_) + + SpdyEstimateMemoryUsage(buffered_spdy_framer_) + + SpdyEstimateMemoryUsage(initial_settings_) + + SpdyEstimateMemoryUsage(stream_send_unstall_queue_) + + SpdyEstimateMemoryUsage(priority_dependency_state_); } // {,Try}CreateStream() can be called with |in_io_loop_| set if a stream is
diff --git a/net/spdy/spdy_session.h b/net/spdy/spdy_session.h index 30150e2..0056482 100644 --- a/net/spdy/spdy_session.h +++ b/net/spdy/spdy_session.h
@@ -191,6 +191,9 @@ // set a delegate for the returned stream (except for test code). base::WeakPtr<SpdyStream> ReleaseStream(); + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; + private: friend class SpdySession; @@ -242,6 +245,7 @@ PushedStreamInfo(SpdyStreamId stream_id, base::TimeTicks creation_time) : stream_id(stream_id), creation_time(creation_time) {} ~PushedStreamInfo() {} + size_t EstimateMemoryUsage() const { return 0; } SpdyStreamId stream_id; base::TimeTicks creation_time; @@ -271,6 +275,8 @@ SpdyStreamId stream_id, const base::TimeTicks& creation_time); + size_t EstimateMemoryUsage() const; + private: SpdySession* spdy_session_; @@ -565,8 +571,10 @@ // indicate whether session is active. // |stats| can be assumed as being default initialized upon entry. // Implementation overrides fields in |stats|. - void DumpMemoryStats(StreamSocket::SocketMemoryStats* stats, - bool* is_session_active) const; + // Returns the estimate of dynamically allocated memory in bytes, which + // includes the size attributed to the underlying socket. + size_t DumpMemoryStats(StreamSocket::SocketMemoryStats* stats, + bool* is_session_active) const; private: friend class test::SpdyStreamTest;
diff --git a/net/spdy/spdy_session_key.cc b/net/spdy/spdy_session_key.cc index 8b2fcbc..4c15e248 100644 --- a/net/spdy/spdy_session_key.cc +++ b/net/spdy/spdy_session_key.cc
@@ -7,6 +7,8 @@ #include <tuple> #include "base/logging.h" +#include "net/base/host_port_pair.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" namespace net { @@ -49,4 +51,8 @@ host_port_proxy_pair_.second == other.host_port_proxy_pair_.second; } +size_t SpdySessionKey::EstimateMemoryUsage() const { + return SpdyEstimateMemoryUsage(host_port_proxy_pair_); +} + } // namespace net
diff --git a/net/spdy/spdy_session_key.h b/net/spdy/spdy_session_key.h index 31d61a3e..f6a8238 100644 --- a/net/spdy/spdy_session_key.h +++ b/net/spdy/spdy_session_key.h
@@ -49,6 +49,9 @@ return privacy_mode_; } + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; + private: HostPortProxyPair host_port_proxy_pair_; // If enabled, then session cannot be tracked by the server.
diff --git a/net/spdy/spdy_session_pool.cc b/net/spdy/spdy_session_pool.cc index 1a594d0..7af02fc 100644 --- a/net/spdy/spdy_session_pool.cc +++ b/net/spdy/spdy_session_pool.cc
@@ -23,6 +23,10 @@ #include "net/log/net_log_event_type.h" #include "net/log/net_log_source.h" #include "net/log/net_log_with_source.h" +#include "net/spdy/hpack/hpack_constants.h" +#include "net/spdy/hpack/hpack_huffman_table.h" +#include "net/spdy/hpack/hpack_static_table.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" #include "net/spdy/spdy_session.h" namespace net { @@ -381,14 +385,15 @@ for (const auto& session : sessions_) { StreamSocket::SocketMemoryStats stats; bool is_session_active = false; - session->DumpMemoryStats(&stats, &is_session_active); - total_size += stats.total_size; + total_size += session->DumpMemoryStats(&stats, &is_session_active); buffer_size += stats.buffer_size; cert_count += stats.cert_count; serialized_cert_size += stats.serialized_cert_size; if (is_session_active) num_active_sessions++; } + total_size += SpdyEstimateMemoryUsage(ObtainHpackHuffmanTable()) + + SpdyEstimateMemoryUsage(ObtainHpackStaticTable()); base::trace_event::MemoryAllocatorDump* dump = pmd->CreateAllocatorDump(base::StringPrintf( "%s/spdy_session_pool", parent_dump_absolute_name.c_str()));
diff --git a/net/spdy/spdy_stream.cc b/net/spdy/spdy_stream.cc index e00ae21..05d9f13b 100644 --- a/net/spdy/spdy_stream.cc +++ b/net/spdy/spdy_stream.cc
@@ -23,6 +23,7 @@ #include "net/log/net_log.h" #include "net/log/net_log_capture_mode.h" #include "net/log/net_log_event_type.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" #include "net/spdy/spdy_buffer_producer.h" #include "net/spdy/spdy_http_utils.h" #include "net/spdy/spdy_session.h" @@ -112,6 +113,7 @@ return std::unique_ptr<SpdyBuffer>( new SpdyBuffer(stream_->ProduceHeadersFrame())); } + size_t EstimateMemoryUsage() const override { return 0; } private: const base::WeakPtr<SpdyStream> stream_; @@ -820,6 +822,16 @@ return result; } +size_t SpdyStream::EstimateMemoryUsage() const { + // TODO(xunjieli): https://crbug.com/669108. Estimate |pending_send_data_| + // once scoped_refptr support is in. + return SpdyEstimateMemoryUsage(url_) + + SpdyEstimateMemoryUsage(request_headers_) + + SpdyEstimateMemoryUsage(url_from_header_block_) + + SpdyEstimateMemoryUsage(pending_recv_data_) + + SpdyEstimateMemoryUsage(response_headers_); +} + void SpdyStream::UpdateHistograms() { // We need at least the receive timers to be filled in, as otherwise // metrics can be bogus.
diff --git a/net/spdy/spdy_stream.h b/net/spdy/spdy_stream.h index 402e892b..816c7bc 100644 --- a/net/spdy/spdy_stream.h +++ b/net/spdy/spdy_stream.h
@@ -372,6 +372,9 @@ // GURL() if it is unknown. const GURL& GetUrlFromHeaders() const { return url_from_header_block_; } + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; + private: class HeadersBufferProducer;
diff --git a/net/spdy/spdy_write_queue.cc b/net/spdy/spdy_write_queue.cc index 50df9440..db498f3a 100644 --- a/net/spdy/spdy_write_queue.cc +++ b/net/spdy/spdy_write_queue.cc
@@ -9,6 +9,7 @@ #include <vector> #include "base/logging.h" +#include "net/spdy/platform/api/spdy_estimate_memory_usage.h" #include "net/spdy/spdy_buffer.h" #include "net/spdy/spdy_buffer_producer.h" #include "net/spdy/spdy_stream.h" @@ -32,6 +33,10 @@ SpdyWriteQueue::PendingWrite& SpdyWriteQueue::PendingWrite::operator=( PendingWrite&& other) = default; +size_t SpdyWriteQueue::PendingWrite::EstimateMemoryUsage() const { + return SpdyEstimateMemoryUsage(frame_producer); +} + SpdyWriteQueue::SpdyWriteQueue() : removing_writes_(false) {} SpdyWriteQueue::~SpdyWriteQueue() { @@ -155,4 +160,8 @@ removing_writes_ = false; } +size_t SpdyWriteQueue::EstimateMemoryUsage() const { + return SpdyEstimateMemoryUsage(queue_); +} + } // namespace net
diff --git a/net/spdy/spdy_write_queue.h b/net/spdy/spdy_write_queue.h index acf6b4c..d781f86 100644 --- a/net/spdy/spdy_write_queue.h +++ b/net/spdy/spdy_write_queue.h
@@ -59,6 +59,9 @@ // Removes all pending writes. void Clear(); + // Returns the estimate of dynamically allocated memory in bytes. + size_t EstimateMemoryUsage() const; + private: // A struct holding a frame producer and its associated stream. struct PendingWrite { @@ -76,6 +79,8 @@ PendingWrite(PendingWrite&& other); PendingWrite& operator=(PendingWrite&& other); + size_t EstimateMemoryUsage() const; + DISALLOW_COPY_AND_ASSIGN(PendingWrite); };
diff --git a/net/spdy/spdy_write_queue_unittest.cc b/net/spdy/spdy_write_queue_unittest.cc index c3587ac..7318be2 100644 --- a/net/spdy/spdy_write_queue_unittest.cc +++ b/net/spdy/spdy_write_queue_unittest.cc
@@ -10,6 +10,7 @@ #include <string> #include <utility> +#include "base/logging.h" #include "base/memory/ref_counted.h" #include "base/strings/string_number_conversions.h" #include "net/base/request_priority.h" @@ -61,6 +62,11 @@ return std::move(buffer_); } + size_t EstimateMemoryUsage() const override { + NOTREACHED(); + return 0; + } + static void ConsumeCallback(SpdyWriteQueue* queue, size_t size, SpdyBuffer::ConsumeSource source) {
diff --git a/remoting/host/win/unprivileged_process_delegate.cc b/remoting/host/win/unprivileged_process_delegate.cc index c9f0041..5c0a6b5 100644 --- a/remoting/host/win/unprivileged_process_delegate.cc +++ b/remoting/host/win/unprivileged_process_delegate.cc
@@ -26,6 +26,7 @@ #include "ipc/ipc_channel_proxy.h" #include "ipc/ipc_message.h" #include "mojo/edk/embedder/embedder.h" +#include "mojo/edk/embedder/pending_process_connection.h" #include "mojo/edk/embedder/platform_channel_pair.h" #include "remoting/base/typed_buffer.h" #include "remoting/host/switches.h" @@ -283,13 +284,10 @@ return; } - const std::string mojo_child_token = mojo::edk::GenerateRandomToken(); - const std::string mojo_message_pipe_token = mojo::edk::GenerateRandomToken(); - + mojo::edk::PendingProcessConnection process; + std::string mojo_message_pipe_token; std::unique_ptr<IPC::ChannelProxy> server = IPC::ChannelProxy::Create( - mojo::edk::CreateParentMessagePipe(mojo_message_pipe_token, - mojo_child_token) - .release(), + process.CreateMessagePipe(&mojo_message_pipe_token).release(), IPC::Channel::MODE_SERVER, this, io_task_runner_); base::CommandLine command_line(target_command_->argv()); command_line.AppendSwitchASCII(kMojoPipeToken, mojo_message_pipe_token); @@ -310,12 +308,10 @@ token.Get(), &process_attributes, &thread_attributes, handles_to_inherit, /* creation_flags= */ 0, /* thread_attributes= */ nullptr, &worker_process, &worker_thread)) { - mojo::edk::ChildProcessLaunchFailed(mojo_child_token); ReportFatalError(); return; } - mojo::edk::ChildProcessLaunched( - worker_process.Get(), mojo_channel.PassServerHandle(), mojo_child_token); + process.Connect(worker_process.Get(), mojo_channel.PassServerHandle()); channel_ = std::move(server);
diff --git a/remoting/host/win/wts_session_process_delegate.cc b/remoting/host/win/wts_session_process_delegate.cc index 635bd04..c665a59c 100644 --- a/remoting/host/win/wts_session_process_delegate.cc +++ b/remoting/host/win/wts_session_process_delegate.cc
@@ -7,6 +7,7 @@ #include "remoting/host/win/wts_session_process_delegate.h" +#include <memory> #include <utility> #include "base/bind.h" @@ -27,6 +28,7 @@ #include "ipc/ipc_message.h" #include "mojo/edk/embedder/embedder.h" #include "mojo/edk/embedder/named_platform_channel_pair.h" +#include "mojo/edk/embedder/pending_process_connection.h" #include "mojo/edk/embedder/platform_channel_pair.h" #include "mojo/edk/embedder/platform_handle_utils.h" #include "mojo/edk/embedder/scoped_platform_handle.h" @@ -155,8 +157,8 @@ // Tracks the id of the worker process. base::ProcessId worker_process_pid_ = base::kNullProcessId; - // The mojo child token for the process being launched. - std::string mojo_child_token_; + // The pending process connection for the process being launched. + std::unique_ptr<mojo::edk::PendingProcessConnection> process_connection_; DISALLOW_COPY_AND_ASSIGN(Core); }; @@ -257,10 +259,7 @@ channel_.reset(); elevated_server_handle_.reset(); elevated_launcher_pid_ = base::kNullProcessId; - if (!mojo_child_token_.empty()) { - mojo::edk::ChildProcessLaunchFailed(mojo_child_token_); - mojo_child_token_.clear(); - } + process_connection_.reset(); } void WtsSessionProcessDelegate::Core::KillProcess() { @@ -391,14 +390,12 @@ target_command_->GetProgram()); } - const std::string mojo_message_pipe_token = mojo::edk::GenerateRandomToken(); - mojo_child_token_ = mojo::edk::GenerateRandomToken(); + std::string mojo_pipe_token; + process_connection_ = base::MakeUnique<mojo::edk::PendingProcessConnection>(); std::unique_ptr<IPC::ChannelProxy> channel = IPC::ChannelProxy::Create( - mojo::edk::CreateParentMessagePipe(mojo_message_pipe_token, - mojo_child_token_) - .release(), + process_connection_->CreateMessagePipe(&mojo_pipe_token).release(), IPC::Channel::MODE_SERVER, this, io_task_runner_); - command_line.AppendSwitchASCII(kMojoPipeToken, mojo_message_pipe_token); + command_line.AppendSwitchASCII(kMojoPipeToken, mojo_pipe_token); std::unique_ptr<mojo::edk::PlatformChannelPair> normal_mojo_channel; std::unique_ptr<mojo::edk::NamedPlatformChannelPair> elevated_mojo_channel; @@ -558,10 +555,8 @@ DCHECK(caller_task_runner_->BelongsToCurrentThread()); DCHECK(!worker_process_.IsValid()); - mojo::edk::ChildProcessLaunched(worker_process.Get(), - std::move(server_handle), - mojo_child_token_); - mojo_child_token_.clear(); + process_connection_->Connect(worker_process.Get(), std::move(server_handle)); + process_connection_.reset(); worker_process_ = std::move(worker_process); // Report a handle that can be used to wait for the worker process completion,
diff --git a/services/service_manager/README.md b/services/service_manager/README.md index ce4e2130..bc54399f 100644 --- a/services/service_manager/README.md +++ b/services/service_manager/README.md
@@ -68,7 +68,7 @@ every time some other service tries to connect to this one. Services have a link back to the Service Manager too, primarily in the form of -the service_manager.mojom.Connector interface. The Connector allows services to +the service_manager.mojom.Connector interface. The Connector allows services to open connections to other services. A unique connection from the Service Manager to a service is called an @@ -140,7 +140,7 @@ What does all this do? Building the app target produces two files in the output directory: Packages/my_service/my_service.library and Packages/my_service/manifest.json. app.library is a DSO loaded by the Service -Manager in its own process when another service connects to the +Manager in its own process when another service connects to the service:my_service name. This is not the only way (nor even the most likely one) you can implement a Service, but it's the simplest and easiest to reason about. @@ -644,29 +644,21 @@ mojo::edk::HandlePassingInformation info; pair.PrepareToPassClientHandleToChildProcess(&target_command_line, &info); - std::string token = mojo::edk::GenerateRandomToken(); + mojo::edk::PendingProcessConnection connection; + std::string token; + mojo::ScopedMessagePipeHandle pipe = connection.CreateMessagePipe(&token); target_command_line.AppendSwitchASCII(switches::kPrimordialPipeToken, token); - mojo::ScopedMessagePipeHandle pipe = - mojo::edk::CreateParentMessagePipe(token); - - service_manager::mojom::ServiceFactoryPtr factory; - factory.Bind( - mojo::InterfacePtrInfo<service_manager::mojom::ServiceFactory>( - std::move(pipe), 0u)); + service_manager::Identity target("exe:target", + service_manager::mojom::kInheritUserID); service_manager::mojom::PIDReceiverPtr receiver; - - service_manager::Identity target("exe:target",service_manager::mojom::kInheritUserID); - service_manager::Connector::ConnectParams params(target); - params.set_client_process_connection(std::move(factory), - MakeRequest(&receiver)); - std::unique_ptr<service_manager::Connection> connection = connector->Connect(¶ms); + connector->RegisterService(target, std::move(pipe), MakeRequest(&receiver)); base::LaunchOptions options; options.handles_to_inherit = &info; base::Process process = base::LaunchProcess(target_command_line, options); - mojo::edk::ChildProcessLaunched(process.Handle(), pair.PassServerHandle()); + connection.Connect(process.Handle(), pair.PassServerHandle()); That's a lot. But it boils down to these steps: 1. Creating the message pipe to connect the target process and the Service
diff --git a/services/service_manager/runner/common/BUILD.gn b/services/service_manager/runner/common/BUILD.gn index be0442a..c4ba43a1 100644 --- a/services/service_manager/runner/common/BUILD.gn +++ b/services/service_manager/runner/common/BUILD.gn
@@ -12,12 +12,12 @@ deps = [ "//base", - "//mojo/edk/system", "//mojo/public/cpp/bindings", "//mojo/public/cpp/system", ] public_deps = [ + "//mojo/edk/system", "//services/service_manager/public/interfaces", ] }
diff --git a/services/service_manager/runner/common/client_util.cc b/services/service_manager/runner/common/client_util.cc index 082d306..efbfe42 100644 --- a/services/service_manager/runner/common/client_util.cc +++ b/services/service_manager/runner/common/client_util.cc
@@ -8,19 +8,18 @@ #include "base/command_line.h" #include "mojo/edk/embedder/embedder.h" +#include "mojo/edk/embedder/pending_process_connection.h" #include "services/service_manager/runner/common/switches.h" namespace service_manager { mojom::ServicePtr PassServiceRequestOnCommandLine( - base::CommandLine* command_line, const std::string& child_token) { - std::string token = mojo::edk::GenerateRandomToken(); - command_line->AppendSwitchASCII(switches::kPrimordialPipeToken, token); - + mojo::edk::PendingProcessConnection* connection, + base::CommandLine* command_line) { + std::string token; mojom::ServicePtr client; - client.Bind( - mojom::ServicePtrInfo( - mojo::edk::CreateParentMessagePipe(token, child_token), 0)); + client.Bind(mojom::ServicePtrInfo(connection->CreateMessagePipe(&token), 0)); + command_line->AppendSwitchASCII(switches::kPrimordialPipeToken, token); return client; }
diff --git a/services/service_manager/runner/common/client_util.h b/services/service_manager/runner/common/client_util.h index 2ca1213..a29f167 100644 --- a/services/service_manager/runner/common/client_util.h +++ b/services/service_manager/runner/common/client_util.h
@@ -5,22 +5,27 @@ #ifndef SERVICES_SERVICE_MANAGER_RUNNER_COMMON_CLIENT_UTIL_H_ #define SERVICES_SERVICE_MANAGER_RUNNER_COMMON_CLIENT_UTIL_H_ -#include <string> - #include "services/service_manager/public/interfaces/service.mojom.h" namespace base { class CommandLine; } +namespace mojo { +namespace edk { +class PendingProcessConnection; +} +} + namespace service_manager { -// Creates a new Service pipe and returns one end of it. The other end is -// passed via a token in |command_line|. A child of the calling process may -// extract a ServiceRequest from this by calling -// GetServiceRequestFromCommandLine(). +// Creates a new Service pipe for connection to a not-yet-launched child process +// and returns one end of it. The other end is passed via a token in +// |command_line|. The launched process may extract the corresponding +// ServiceRequest by calling GetServiceRequestFromCommandLine(). mojom::ServicePtr PassServiceRequestOnCommandLine( - base::CommandLine* command_line, const std::string& child_token); + mojo::edk::PendingProcessConnection* connection, + base::CommandLine* command_line); // Extracts a ServiceRequest from the command line of the current process. // The parent of this process should have passed a request using
diff --git a/services/service_manager/runner/host/service_process_launcher.cc b/services/service_manager/runner/host/service_process_launcher.cc index 4bc8a07..759df006 100644 --- a/services/service_manager/runner/host/service_process_launcher.cc +++ b/services/service_manager/runner/host/service_process_launcher.cc
@@ -47,7 +47,6 @@ delegate_(delegate), start_sandboxed_(false), service_path_(service_path), - child_token_(mojo::edk::GenerateRandomToken()), start_child_process_event_( base::WaitableEvent::ResetPolicy::AUTOMATIC, base::WaitableEvent::InitialState::NOT_SIGNALED), @@ -90,8 +89,8 @@ mojo_ipc_channel_->PrepareToPassClientHandleToChildProcess( child_command_line.get(), &handle_passing_info_); - mojom::ServicePtr client = - PassServiceRequestOnCommandLine(child_command_line.get(), child_token_); + mojom::ServicePtr client = PassServiceRequestOnCommandLine( + &process_connection_, child_command_line.get()); launch_process_runner_->PostTaskAndReply( FROM_HERE, base::Bind(&ServiceProcessLauncher::DoLaunch, base::Unretained(this), @@ -197,11 +196,8 @@ if (mojo_ipc_channel_.get()) { mojo_ipc_channel_->ChildProcessLaunched(); - mojo::edk::ChildProcessLaunched( - child_process_.Handle(), - mojo::edk::ScopedPlatformHandle(mojo::edk::PlatformHandle( - mojo_ipc_channel_->PassServerHandle().release().handle)), - child_token_); + process_connection_.Connect(child_process_.Handle(), + mojo_ipc_channel_->PassServerHandle()); } } start_child_process_event_.Signal();
diff --git a/services/service_manager/runner/host/service_process_launcher.h b/services/service_manager/runner/host/service_process_launcher.h index d117f7c..39afe1f 100644 --- a/services/service_manager/runner/host/service_process_launcher.h +++ b/services/service_manager/runner/host/service_process_launcher.h
@@ -15,6 +15,7 @@ #include "base/memory/weak_ptr.h" #include "base/process/process.h" #include "base/synchronization/waitable_event.h" +#include "mojo/edk/embedder/pending_process_connection.h" #include "mojo/edk/embedder/platform_channel_pair.h" #include "services/service_manager/public/interfaces/service_factory.mojom.h" @@ -83,7 +84,7 @@ // Used to initialize the Mojo IPC channel between parent and child. std::unique_ptr<mojo::edk::PlatformChannelPair> mojo_ipc_channel_; mojo::edk::HandlePassingInformation handle_passing_info_; - const std::string child_token_; + mojo::edk::PendingProcessConnection process_connection_; // Since Start() calls a method on another thread, we use an event to block // the main thread if it tries to destruct |this| while launching the process.
diff --git a/services/service_manager/tests/service_manager/service_manager_unittest.cc b/services/service_manager/tests/service_manager/service_manager_unittest.cc index 39a21eca..8708856 100644 --- a/services/service_manager/tests/service_manager/service_manager_unittest.cc +++ b/services/service_manager/tests/service_manager/service_manager_unittest.cc
@@ -20,6 +20,7 @@ #include "base/process/process_handle.h" #include "base/run_loop.h" #include "mojo/edk/embedder/embedder.h" +#include "mojo/edk/embedder/pending_process_connection.h" #include "mojo/edk/embedder/platform_channel_pair.h" #include "mojo/edk/embedder/scoped_platform_handle.h" #include "mojo/public/cpp/bindings/binding_set.h" @@ -176,10 +177,10 @@ platform_channel_pair.PrepareToPassClientHandleToChildProcess( &child_command_line, &handle_passing_info); - std::string child_token = mojo::edk::GenerateRandomToken(); + mojo::edk::PendingProcessConnection process_connection; service_manager::mojom::ServicePtr client = - service_manager::PassServiceRequestOnCommandLine(&child_command_line, - child_token); + service_manager::PassServiceRequestOnCommandLine(&process_connection, + &child_command_line); service_manager::mojom::PIDReceiverPtr receiver; service_manager::Identity target("service_manager_unittest_target", @@ -201,9 +202,8 @@ target_ = base::LaunchProcess(child_command_line, options); DCHECK(target_.IsValid()); receiver->SetPID(target_.Pid()); - mojo::edk::ChildProcessLaunched(target_.Handle(), - platform_channel_pair.PassServerHandle(), - child_token); + process_connection.Connect(target_.Handle(), + platform_channel_pair.PassServerHandle()); } void KillTarget() {
diff --git a/services/service_manager/tests/util.cc b/services/service_manager/tests/util.cc index 98bc47de..b12f6dbf 100644 --- a/services/service_manager/tests/util.cc +++ b/services/service_manager/tests/util.cc
@@ -58,16 +58,11 @@ platform_channel_pair.PrepareToPassClientHandleToChildProcess( &child_command_line, &handle_passing_info); - // Generate a token for the child to find and connect to a primordial pipe - // and pass that as well. - std::string primordial_pipe_token = mojo::edk::GenerateRandomToken(); - child_command_line.AppendSwitchASCII(switches::kPrimordialPipeToken, - primordial_pipe_token); - - // Allocate the pipe locally. - std::string child_token = mojo::edk::GenerateRandomToken(); + mojo::edk::PendingProcessConnection pending_process; + std::string token; mojo::ScopedMessagePipeHandle pipe = - mojo::edk::CreateParentMessagePipe(primordial_pipe_token, child_token); + pending_process.CreateMessagePipe(&token); + child_command_line.AppendSwitchASCII(switches::kPrimordialPipeToken, token); service_manager::mojom::ServicePtr client; client.Bind(mojo::InterfacePtrInfo<service_manager::mojom::Service>( @@ -94,9 +89,8 @@ *process = base::LaunchProcess(child_command_line, options); DCHECK(process->IsValid()); receiver->SetPID(process->Pid()); - mojo::edk::ChildProcessLaunched(process->Handle(), - platform_channel_pair.PassServerHandle(), - child_token); + pending_process.Connect(process->Handle(), + platform_channel_pair.PassServerHandle()); return connection; }
diff --git a/services/ui/public/interfaces/window_tree.mojom b/services/ui/public/interfaces/window_tree.mojom index e606490..ab53d13 100644 --- a/services/ui/public/interfaces/window_tree.mojom +++ b/services/ui/public/interfaces/window_tree.mojom
@@ -416,6 +416,7 @@ // |matches_pointer_watcher|. OnWindowInputEvent(uint32 event_id, uint32 window, + int64 display_id, ui.mojom.Event event, bool matches_pointer_watcher); @@ -424,7 +425,9 @@ // StartPointerWatcher() for details. |window_id| is the window id of the // event target, or 0 if the window is not known to this client. The // client should not acknowledge these events. - OnPointerEventObserved(ui.mojom.Event event, uint32 window_id); + OnPointerEventObserved(ui.mojom.Event event, + uint32 window_id, + int64 display_id); // Called in two distinct cases: when a window known to the connection gains // focus, or when focus moves from a window known to the connection to a
diff --git a/services/ui/ws/display.cc b/services/ui/ws/display.cc index 68e8657..b3981b8 100644 --- a/services/ui/ws/display.cc +++ b/services/ui/ws/display.cc
@@ -284,7 +284,7 @@ void Display::OnEvent(const ui::Event& event) { WindowManagerDisplayRoot* display_root = GetActiveWindowManagerDisplayRoot(); if (display_root) - display_root->window_manager_state()->ProcessEvent(event); + display_root->window_manager_state()->ProcessEvent(event, GetId()); window_server_ ->GetUserActivityMonitorForUser( window_server_->user_id_tracker()->active_id())
diff --git a/services/ui/ws/test_utils.cc b/services/ui/ws/test_utils.cc index c906176..914a72f 100644 --- a/services/ui/ws/test_utils.cc +++ b/services/ui/ws/test_utils.cc
@@ -359,6 +359,7 @@ void TestWindowTreeClient::OnWindowInputEvent(uint32_t event_id, uint32_t window, + int64_t display_id, std::unique_ptr<ui::Event> event, bool matches_pointer_watcher) { tracker_.OnWindowInputEvent(window, *event.get(), matches_pointer_watcher); @@ -366,7 +367,8 @@ void TestWindowTreeClient::OnPointerEventObserved( std::unique_ptr<ui::Event> event, - uint32_t window_id) { + uint32_t window_id, + int64_t display_id) { tracker_.OnPointerEventObserved(*event.get(), window_id); }
diff --git a/services/ui/ws/test_utils.h b/services/ui/ws/test_utils.h index 29d65cd..b6fc6d8 100644 --- a/services/ui/ws/test_utils.h +++ b/services/ui/ws/test_utils.h
@@ -207,7 +207,9 @@ return wms_->GetEventTargetClientId(window, in_nonclient_area); } - void ProcessEvent(const ui::Event& event) { wms_->ProcessEvent(event); } + void ProcessEvent(const ui::Event& event, int64_t display_id = 0) { + wms_->ProcessEvent(event, display_id); + } void OnEventAckTimeout(ClientSpecificId client_id) { wms_->OnEventAckTimeout(client_id); @@ -219,7 +221,8 @@ } WindowTree* tree_awaiting_input_ack() { - return wms_->tree_awaiting_input_ack_; + return wms_->in_flight_event_details_ ? wms_->in_flight_event_details_->tree + : nullptr; } private: @@ -442,10 +445,12 @@ const base::Optional<std::vector<uint8_t>>& new_data) override; void OnWindowInputEvent(uint32_t event_id, uint32_t window, + int64_t display_id, std::unique_ptr<ui::Event> event, bool matches_pointer_watcher) override; void OnPointerEventObserved(std::unique_ptr<ui::Event> event, - uint32_t window_id) override; + uint32_t window_id, + int64_t display_id) override; void OnWindowFocused(uint32_t focused_window_id) override; void OnWindowPredefinedCursorChanged(uint32_t window_id, mojom::Cursor cursor_id) override;
diff --git a/services/ui/ws/window_manager_state.cc b/services/ui/ws/window_manager_state.cc index d1725e8..76c5684e 100644 --- a/services/ui/ws/window_manager_state.cc +++ b/services/ui/ws/window_manager_state.cc
@@ -67,6 +67,18 @@ } // namespace +WindowManagerState::InFlightEventDetails::InFlightEventDetails( + WindowTree* tree, + int64_t display_id, + const Event& event, + EventDispatchPhase phase) + : tree(tree), + display_id(display_id), + event(Event::Clone(event)), + phase(phase) {} + +WindowManagerState::InFlightEventDetails::~InFlightEventDetails() {} + class WindowManagerState::ProcessedEventTarget { public: ProcessedEventTarget(ServerWindow* window, @@ -169,9 +181,10 @@ const std::unordered_map<std::string, std::vector<uint8_t>>& drag_data, uint32_t drag_operation) { int32_t drag_pointer = PointerEvent::kMousePointerId; - if (event_awaiting_input_ack_ && - event_awaiting_input_ack_->IsPointerEvent()) { - drag_pointer = event_awaiting_input_ack_->AsPointerEvent()->pointer_id(); + if (in_flight_event_details_ && + in_flight_event_details_->event->IsPointerEvent()) { + drag_pointer = + in_flight_event_details_->event->AsPointerEvent()->pointer_id(); } else { NOTIMPLEMENTED() << "Set drag drop set up during something other than a " << "pointer event; rejecting drag."; @@ -205,15 +218,15 @@ void WindowManagerState::OnWillDestroyTree(WindowTree* tree) { event_dispatcher_.OnWillDestroyDragTargetConnection(tree); - if (tree_awaiting_input_ack_ != tree) + if (!in_flight_event_details_ || in_flight_event_details_->tree != tree) return; // The WindowTree is dying. So it's not going to ack the event. // If the dying tree matches the root |tree_| marked as handled so we don't // notify it of accelerators. - OnEventAck(tree_awaiting_input_ack_, tree == window_tree_ - ? mojom::EventResult::HANDLED - : mojom::EventResult::UNHANDLED); + OnEventAck(in_flight_event_details_->tree, + tree == window_tree_ ? mojom::EventResult::HANDLED + : mojom::EventResult::UNHANDLED); } ServerWindow* WindowManagerState::GetOrphanedRootWithId(const WindowId& id) { @@ -243,66 +256,68 @@ event_queue.swap(event_queue_); } -void WindowManagerState::ProcessEvent(const ui::Event& event) { +void WindowManagerState::ProcessEvent(const ui::Event& event, + int64_t display_id) { // If this is still waiting for an ack from a previously sent event, then // queue up the event to be dispatched once the ack is received. - if (event_ack_timer_.IsRunning()) { + if (in_flight_event_details_) { if (!event_queue_.empty() && !event_queue_.back()->processed_target && EventsCanBeCoalesced(*event_queue_.back()->event, event)) { event_queue_.back()->event = CoalesceEvents( std::move(event_queue_.back()->event), ui::Event::Clone(event)); + event_queue_.back()->display_id = display_id; return; } - QueueEvent(event, nullptr); + QueueEvent(event, nullptr, display_id); return; } - ProcessEventImpl(event); + ProcessEventImpl(event, display_id); } void WindowManagerState::OnEventAck(mojom::WindowTree* tree, mojom::EventResult result) { - if (tree_awaiting_input_ack_ != tree || - event_dispatch_phase_ != EventDispatchPhase::TARGET) { + if (!in_flight_event_details_ || in_flight_event_details_->tree != tree || + in_flight_event_details_->phase != EventDispatchPhase::TARGET) { // TODO(sad): The ack must have arrived after the timeout. We should do // something here, and in OnEventAckTimeout(). return; } - tree_awaiting_input_ack_ = nullptr; - event_ack_timer_.Stop(); + std::unique_ptr<InFlightEventDetails> details = + std::move(in_flight_event_details_); base::WeakPtr<Accelerator> post_target_accelerator = post_target_accelerator_; post_target_accelerator_.reset(); - std::unique_ptr<ui::Event> event = std::move(event_awaiting_input_ack_); if (result == mojom::EventResult::UNHANDLED && post_target_accelerator) { - OnAccelerator(post_target_accelerator->id(), *event, + OnAccelerator(post_target_accelerator->id(), *details->event, AcceleratorPhase::POST); } - event_dispatch_phase_ = EventDispatchPhase::NONE; ProcessNextEventFromQueue(); } void WindowManagerState::OnAcceleratorAck(mojom::EventResult result) { - if (event_dispatch_phase_ != EventDispatchPhase::PRE_TARGET_ACCELERATOR) { + if (!in_flight_event_details_ || + in_flight_event_details_->phase != + EventDispatchPhase::PRE_TARGET_ACCELERATOR) { // TODO(sad): The ack must have arrived after the timeout. We should do // something here, and in OnEventAckTimeout(). return; } - tree_awaiting_input_ack_ = nullptr; - event_ack_timer_.Stop(); - event_dispatch_phase_ = EventDispatchPhase::NONE; - std::unique_ptr<ui::Event> event = std::move(event_awaiting_input_ack_); + std::unique_ptr<InFlightEventDetails> details = + std::move(in_flight_event_details_); if (result == mojom::EventResult::UNHANDLED) { + event_processing_display_id_ = details->display_id; event_dispatcher_.ProcessEvent( - *event, EventDispatcher::AcceleratorMatchPhase::POST_ONLY); + *details->event, EventDispatcher::AcceleratorMatchPhase::POST_ONLY); } else { // We're not going to process the event any further, notify event observers. // We don't do this first to ensure we don't send an event twice to clients. - window_server()->SendToPointerWatchers(*event, user_id(), nullptr, nullptr); + window_server()->SendToPointerWatchers(*details->event, user_id(), nullptr, + nullptr, details->display_id); ProcessNextEventFromQueue(); } } @@ -363,25 +378,33 @@ WindowTree* hung_tree = window_server()->GetTreeWithId(client_id); if (hung_tree && !hung_tree->janky()) window_tree_->ClientJankinessChanged(hung_tree); - if (event_dispatch_phase_ == EventDispatchPhase::PRE_TARGET_ACCELERATOR) + if (in_flight_event_details_->phase == + EventDispatchPhase::PRE_TARGET_ACCELERATOR) { OnAcceleratorAck(mojom::EventResult::UNHANDLED); - else - OnEventAck(tree_awaiting_input_ack_, mojom::EventResult::UNHANDLED); + } else { + OnEventAck( + in_flight_event_details_ ? in_flight_event_details_->tree : nullptr, + mojom::EventResult::UNHANDLED); + } } -void WindowManagerState::ProcessEventImpl(const ui::Event& event) { +void WindowManagerState::ProcessEventImpl(const ui::Event& event, + int64_t display_id) { // Debug accelerators are always checked and don't interfere with processing. ProcessDebugAccelerator(event); + event_processing_display_id_ = display_id; event_dispatcher_.ProcessEvent(event, EventDispatcher::AcceleratorMatchPhase::ANY); } void WindowManagerState::QueueEvent( const ui::Event& event, - std::unique_ptr<ProcessedEventTarget> processed_event_target) { + std::unique_ptr<ProcessedEventTarget> processed_event_target, + int64_t display_id) { std::unique_ptr<QueuedEvent> queued_event(new QueuedEvent); queued_event->event = ui::Event::Clone(event); queued_event->processed_target = std::move(processed_event_target); + queued_event->display_id = display_id; event_queue_.push(std::move(queued_event)); } @@ -392,7 +415,7 @@ std::unique_ptr<QueuedEvent> queued_event = std::move(event_queue_.front()); event_queue_.pop(); if (!queued_event->processed_target) { - ProcessEventImpl(*queued_event->event); + ProcessEventImpl(*queued_event->event, queued_event->display_id); return; } if (queued_event->processed_target->IsValid()) { @@ -410,7 +433,8 @@ ClientSpecificId client_id, const ui::Event& event, base::WeakPtr<Accelerator> accelerator) { - if (target && target->parent() == nullptr) + DCHECK(target); + if (target->parent() == nullptr) target = GetWindowManagerRoot(target); if (event.IsMousePointerEvent()) { @@ -418,19 +442,16 @@ UpdateNativeCursorFromDispatcher(); } - event_dispatch_phase_ = EventDispatchPhase::TARGET; - WindowTree* tree = window_server()->GetTreeWithId(client_id); DCHECK(tree); - ScheduleInputEventTimeout(tree); - - event_awaiting_input_ack_ = ui::Event::Clone(event); + ScheduleInputEventTimeout(tree, target, event, EventDispatchPhase::TARGET); if (accelerator) post_target_accelerator_ = accelerator; // Ignore |tree| because it will receive the event via normal dispatch. - window_server()->SendToPointerWatchers(event, user_id(), target, tree); + window_server()->SendToPointerWatchers(event, user_id(), target, tree, + in_flight_event_details_->display_id); tree->DispatchInputEvent(target, event); } @@ -469,16 +490,22 @@ #endif } -void WindowManagerState::ScheduleInputEventTimeout(WindowTree* tree) { +void WindowManagerState::ScheduleInputEventTimeout(WindowTree* tree, + ServerWindow* target, + const Event& event, + EventDispatchPhase phase) { + std::unique_ptr<InFlightEventDetails> details = + base::MakeUnique<InFlightEventDetails>(tree, event_processing_display_id_, + event, phase); + // TOOD(sad): Adjust this delay, possibly make this dynamic. const base::TimeDelta max_delay = base::debug::BeingDebugged() ? base::TimeDelta::FromDays(1) : GetDefaultAckTimerDelay(); - event_ack_timer_.Start(FROM_HERE, max_delay, - base::Bind(&WindowManagerState::OnEventAckTimeout, - weak_factory_.GetWeakPtr(), tree->id())); - - tree_awaiting_input_ack_ = tree; + details->timer.Start(FROM_HERE, max_delay, + base::Bind(&WindowManagerState::OnEventAckTimeout, + weak_factory_.GetWeakPtr(), tree->id())); + in_flight_event_details_ = std::move(details); } //////////////////////////////////////////////////////////////////////////////// @@ -490,10 +517,9 @@ DCHECK(IsActive()); const bool needs_ack = phase == AcceleratorPhase::PRE; if (needs_ack) { - DCHECK_EQ(EventDispatchPhase::NONE, event_dispatch_phase_); - event_dispatch_phase_ = EventDispatchPhase::PRE_TARGET_ACCELERATOR; - event_awaiting_input_ack_ = ui::Event::Clone(event); - ScheduleInputEventTimeout(window_tree_); + DCHECK(!in_flight_event_details_); + ScheduleInputEventTimeout(window_tree_, nullptr, event, + EventDispatchPhase::PRE_TARGET_ACCELERATOR); } window_tree_->OnAccelerator(accelerator_id, event, needs_ack); } @@ -553,10 +579,11 @@ DCHECK(IsActive()); // TODO(sky): this needs to see if another wms has capture and if so forward // to it. - if (event_ack_timer_.IsRunning()) { + if (in_flight_event_details_) { std::unique_ptr<ProcessedEventTarget> processed_event_target( new ProcessedEventTarget(target, client_id, accelerator)); - QueueEvent(event, std::move(processed_event_target)); + QueueEvent(event, std::move(processed_event_target), + event_processing_display_id_); return; } @@ -625,7 +652,8 @@ void WindowManagerState::OnEventTargetNotFound(const ui::Event& event) { window_server()->SendToPointerWatchers(event, user_id(), nullptr, /* window */ - nullptr /* ignore_tree */); + nullptr /* ignore_tree */, + event_processing_display_id_); if (event.IsMousePointerEvent()) UpdateNativeCursorFromDispatcher(); }
diff --git a/services/ui/ws/window_manager_state.h b/services/ui/ws/window_manager_state.h index 88f0921..67a343b5 100644 --- a/services/ui/ws/window_manager_state.h +++ b/services/ui/ws/window_manager_state.h
@@ -92,7 +92,7 @@ void Deactivate(); // Processes an event from PlatformDisplay. - void ProcessEvent(const ui::Event& event); + void ProcessEvent(const Event& event, int64_t display_id); // Called when the ack from an event dispatched to WindowTree |tree| is // received. @@ -117,10 +117,10 @@ }; struct DebugAccelerator { - bool Matches(const ui::KeyEvent& event) const; + bool Matches(const KeyEvent& event) const; DebugAcceleratorType type; - ui::KeyboardCode key_code; + KeyboardCode key_code; int event_flags; }; @@ -147,8 +147,24 @@ QueuedEvent(); ~QueuedEvent(); - std::unique_ptr<ui::Event> event; + std::unique_ptr<Event> event; std::unique_ptr<ProcessedEventTarget> processed_target; + int64_t display_id; + }; + + // Tracks state associated with an event being dispatched to a client. + struct InFlightEventDetails { + InFlightEventDetails(WindowTree* tree, + int64_t display_id, + const Event& event, + EventDispatchPhase phase); + ~InFlightEventDetails(); + + base::OneShotTimer timer; + WindowTree* tree; + int64_t display_id; + std::unique_ptr<Event> event; + EventDispatchPhase phase; }; const WindowServer* window_server() const; @@ -178,11 +194,12 @@ // Implemenation of processing an event with a match phase of all. This // handles debug accelerators and forwards to EventDispatcher. - void ProcessEventImpl(const ui::Event& event); + void ProcessEventImpl(const Event& event, int64_t display_id); // Schedules an event to be processed later. - void QueueEvent(const ui::Event& event, - std::unique_ptr<ProcessedEventTarget> processed_event_target); + void QueueEvent(const Event& event, + std::unique_ptr<ProcessedEventTarget> processed_event_target, + int64_t display_id); // Processes the next valid event in |event_queue_|. If the event has already // been processed it is dispatched, otherwise the event is passed to the @@ -192,7 +209,7 @@ // Dispatches the event to the appropriate client and starts the ack timer. void DispatchInputEventToWindowImpl(ServerWindow* target, ClientSpecificId client_id, - const ui::Event& event, + const Event& event, base::WeakPtr<Accelerator> accelerator); // Registers accelerators used internally for debugging. @@ -200,17 +217,20 @@ // Finds the debug accelerator for |event| and if one is found calls // HandleDebugAccelerator(). - void ProcessDebugAccelerator(const ui::Event& event); + void ProcessDebugAccelerator(const Event& event); // Runs the specified debug accelerator. void HandleDebugAccelerator(DebugAcceleratorType type); // Called when waiting for an event or accelerator to be processed by |tree|. - void ScheduleInputEventTimeout(WindowTree* tree); + void ScheduleInputEventTimeout(WindowTree* tree, + ServerWindow* target, + const Event& event, + EventDispatchPhase phase); // EventDispatcherDelegate: void OnAccelerator(uint32_t accelerator_id, - const ui::Event& event, + const Event& event, AcceleratorPhase phase) override; void SetFocusedWindowFromEventDispatcher(ServerWindow* window) override; ServerWindow* GetFocusedWindowForEventDispatcher() override; @@ -222,12 +242,12 @@ void OnMouseCursorLocationChanged(const gfx::Point& point) override; void DispatchInputEventToWindow(ServerWindow* target, ClientSpecificId client_id, - const ui::Event& event, + const Event& event, Accelerator* accelerator) override; ClientSpecificId GetEventTargetClientId(const ServerWindow* window, bool in_nonclient_area) override; ServerWindow* GetRootWindowContaining(gfx::Point* location) override; - void OnEventTargetNotFound(const ui::Event& event) override; + void OnEventTargetNotFound(const Event& event) override; // ServerWindowObserver: void OnWindowEmbeddedAppDisconnected(ServerWindow* window) override; @@ -240,17 +260,15 @@ bool got_frame_decoration_values_ = false; mojom::FrameDecorationValuesPtr frame_decoration_values_; - EventDispatchPhase event_dispatch_phase_ = EventDispatchPhase::NONE; - // The tree we're waiting to process the current accelerator or event. - WindowTree* tree_awaiting_input_ack_ = nullptr; - // The event we're awaiting an accelerator or input ack from. - std::unique_ptr<ui::Event> event_awaiting_input_ack_; base::WeakPtr<Accelerator> post_target_accelerator_; std::queue<std::unique_ptr<QueuedEvent>> event_queue_; - base::OneShotTimer event_ack_timer_; std::vector<DebugAccelerator> debug_accelerators_; + // If non-null we're actively waiting for a response from a client for an + // event. + std::unique_ptr<InFlightEventDetails> in_flight_event_details_; + EventDispatcher event_dispatcher_; // PlatformDisplay that currently has capture. @@ -259,6 +277,9 @@ // All the active WindowManagerDisplayRoots. WindowManagerDisplayRoots window_manager_display_roots_; + // Id of the display the current event being processed originated from. + int64_t event_processing_display_id_ = 0; + // Set of WindowManagerDisplayRoots corresponding to Displays that have been // destroyed. WindowManagerDisplayRoots are not destroyed immediately when // the Display is destroyed to allow the client to destroy the window when it
diff --git a/services/ui/ws/window_manager_state_unittest.cc b/services/ui/ws/window_manager_state_unittest.cc index 7a502a9..d9910245 100644 --- a/services/ui/ws/window_manager_state_unittest.cc +++ b/services/ui/ws/window_manager_state_unittest.cc
@@ -239,7 +239,7 @@ // Send an ensure only the pre accelerator is called. ui::KeyEvent key(ui::ET_KEY_PRESSED, ui::VKEY_W, ui::EF_CONTROL_DOWN); - window_manager_state()->ProcessEvent(key); + window_manager_state()->ProcessEvent(key, 0); EXPECT_TRUE(window_manager()->on_accelerator_called()); EXPECT_EQ(accelerator_id, window_manager()->on_accelerator_id()); EXPECT_TRUE(tracker->changes()->empty()); @@ -254,7 +254,7 @@ window_manager()->ClearAcceleratorCalled(); // Repeat, but respond with UNHANDLED. - window_manager_state()->ProcessEvent(key); + window_manager_state()->ProcessEvent(key, 0); EXPECT_TRUE(window_manager()->on_accelerator_called()); EXPECT_EQ(accelerator_id, window_manager()->on_accelerator_id()); EXPECT_TRUE(tracker->changes()->empty()); @@ -583,7 +583,7 @@ ui::ET_POINTER_MOVED, gfx::Point(25, 25), gfx::Point(25, 25), 0, 0, 0, ui::PointerDetails(EventPointerType::POINTER_TYPE_MOUSE), base::TimeTicks()); - window_manager_state()->ProcessEvent(move); + window_manager_state()->ProcessEvent(move, 0); // The event isn't over a valid target, which should trigger resetting the // cursor to POINTER. EXPECT_EQ(ui::mojom::Cursor::POINTER, display_test_api.last_cursor());
diff --git a/services/ui/ws/window_server.cc b/services/ui/ws/window_server.cc index 9ab1795..b96c0c98 100644 --- a/services/ui/ws/window_server.cc +++ b/services/ui/ws/window_server.cc
@@ -425,11 +425,12 @@ void WindowServer::SendToPointerWatchers(const ui::Event& event, const UserId& user_id, ServerWindow* target_window, - WindowTree* ignore_tree) { + WindowTree* ignore_tree, + int64_t display_id) { for (auto& pair : tree_map_) { WindowTree* tree = pair.second.get(); if (tree->user_id() == user_id && tree != ignore_tree) - tree->SendToPointerWatcher(event, target_window); + tree->SendToPointerWatcher(event, target_window, display_id); } }
diff --git a/services/ui/ws/window_server.h b/services/ui/ws/window_server.h index 32fc0d66..26bcfbd5 100644 --- a/services/ui/ws/window_server.h +++ b/services/ui/ws/window_server.h
@@ -195,7 +195,8 @@ void SendToPointerWatchers(const ui::Event& event, const UserId& user_id, ServerWindow* target_window, - WindowTree* ignore_tree); + WindowTree* ignore_tree, + int64_t display_id); // Sets a callback to be called whenever a ServerWindow is scheduled for // a [re]paint. This should only be called in a test configuration.
diff --git a/services/ui/ws/window_tree.cc b/services/ui/ws/window_tree.cc index 5322466..ce6c4a6 100644 --- a/services/ui/ws/window_tree.cc +++ b/services/ui/ws/window_tree.cc
@@ -798,7 +798,8 @@ } void WindowTree::SendToPointerWatcher(const ui::Event& event, - ServerWindow* target_window) { + ServerWindow* target_window, + int64_t display_id) { if (!EventMatchesPointerWatcher(event)) return; @@ -806,8 +807,8 @@ // Ignore the return value from IsWindowKnown() as in the case of the client // not knowing the window we'll send 0, which corresponds to no window. IsWindowKnown(target_window, &client_window_id); - client()->OnPointerEventObserved(ui::Event::Clone(event), - client_window_id.id); + client()->OnPointerEventObserved(ui::Event::Clone(event), client_window_id.id, + display_id); } bool WindowTree::ShouldRouteToWindowManager(const ServerWindow* window) const { @@ -1146,8 +1147,10 @@ // Should only get events from windows attached to a host. DCHECK(event_source_wms_); bool matched_pointer_watcher = EventMatchesPointerWatcher(event); + Display* display = GetDisplay(target); + DCHECK(display); client()->OnWindowInputEvent( - event_ack_id_, ClientWindowIdForWindow(target).id, + event_ack_id_, ClientWindowIdForWindow(target).id, display->GetId(), ui::Event::Clone(event), matched_pointer_watcher); }
diff --git a/services/ui/ws/window_tree.h b/services/ui/ws/window_tree.h index ea6dd8b..0c54d29 100644 --- a/services/ui/ws/window_tree.h +++ b/services/ui/ws/window_tree.h
@@ -264,7 +264,8 @@ // |target_window| is the target of the event, and may be null or not known // to this tree. void SendToPointerWatcher(const ui::Event& event, - ServerWindow* target_window); + ServerWindow* target_window, + int64_t display_id); private: friend class test::WindowTreeTestApi;
diff --git a/services/ui/ws/window_tree_client_unittest.cc b/services/ui/ws/window_tree_client_unittest.cc index 134c342..916a8e5 100644 --- a/services/ui/ws/window_tree_client_unittest.cc +++ b/services/ui/ws/window_tree_client_unittest.cc
@@ -352,6 +352,7 @@ } void OnWindowInputEvent(uint32_t event_id, Id window_id, + int64_t display_id, std::unique_ptr<ui::Event> event, bool matches_pointer_watcher) override { // Ack input events to clear the state on the server. These can be received @@ -362,7 +363,8 @@ // may come in at random points. } void OnPointerEventObserved(std::unique_ptr<ui::Event>, - uint32_t window_id) override {} + uint32_t window_id, + int64_t display_id) override {} void OnWindowSharedPropertyChanged( uint32_t window, const std::string& name,
diff --git a/styleguide/java/OWNERS b/styleguide/java/OWNERS new file mode 100644 index 0000000..137bf18 --- /dev/null +++ b/styleguide/java/OWNERS
@@ -0,0 +1,5 @@ +agrieve@chromium.org +dfalcantara@chromium.org +nyquist@chromium.org +tedchoc@chromium.org +yfriedman@chromium.org
diff --git a/styleguide/java/java.md b/styleguide/java/java.md new file mode 100644 index 0000000..ad1a1ba2 --- /dev/null +++ b/styleguide/java/java.md
@@ -0,0 +1,71 @@ +# Chromium Java style guide + +_For other languages, please see the [Chromium style +guides](https://chromium.googlesource.com/chromium/src/+/master/styleguide/styleguide.md)._ + +Chromium follows the [Android Open Source style +guide](http://source.android.com/source/code-style.html) unless an exception +is listed below. + +## Style + +* Copyright header should use + [Chromium](https://chromium.googlesource.com/chromium/src/+/master/styleguide/styleguide.md) + style. +* TODO should follow chromium convention i.e. `TODO(username)`. +* Use of ```assert``` statements are encouraged. +* Fields should not be explicitly initialized to default values (see + [here](https://groups.google.com/a/chromium.org/d/topic/chromium-dev/ylbLOvLs0bs/discussion)). +* For automated style checking install + [checkstyle](https://sites.google.com/a/chromium.org/dev/developers/checkstyle). + +## Location + +"Top level directories" are defined as directories with a GN file, such as +[//base](https://chromium.googlesource.com/chromium/src/+/master/base/) +and +[//content](https://chromium.googlesource.com/chromium/src/+/master/content/), +Chromium Java should live in a directory named +`<top level directory>/android/java`, with a package name +`org.chromium.<top level directory>`. Each top level directory's Java should +build into a distinct JAR that honors the abstraction specified in a native +[checkdeps](https://chromium.googlesource.com/chromium/buildtools/+/master/checkdeps/checkdeps.py) +(e.g. `org.chromium.base` does not import `org.chromium.content`). The full +path of any java file should contain the complete package name. + +For example, top level directory `//base` might contain a file named +`base/android/java/org/chromium/base/Class.java`. This would get compiled into a +`chromium_base.jar` (final JAR name TBD). + +`org.chromium.chrome.browser.foo.Class` would live in +`chrome/android/java/org/chromium/chrome/browser/foo/Class.java`. + +New `<top level directory>/android` directories should have an `OWNERS` file +much like +[//base/android/OWNERS](https://chromium.googlesource.com/chromium/src/+/master/base/android/OWNERS). + +## Asserts + +The Chromium build system strips asserts in release builds (via ProGuard) and +enables them in debug builds (or when `dcheck_always_on=true`) (via a [build +step](https://codereview.chromium.org/2517203002)). You should use asserts in +the [same +scenarios](https://chromium.googlesource.com/chromium/src/+/master/styleguide/c++/c++.md#CHECK_DCHECK_and-NOTREACHED) +where C++ DCHECK()s make sense. For multi-statement asserts, use +`org.chromium.base.BuildConfig.DCHECK_IS_ON` to guard your code. + +Example assert: + +```java +assert someCallWithSideEffects() : "assert description"; +``` + +Example use of `DCHECK_IS_ON`: + +```java +if (org.chromium.base.BuildConfig.DCHECK_IS_ON) { + if (!someCallWithSideEffects()) { + throw new AssertionError("assert description"); + } +} +```
diff --git a/styleguide/styleguide.md b/styleguide/styleguide.md index 9fa42482..f9aee62 100644 --- a/styleguide/styleguide.md +++ b/styleguide/styleguide.md
@@ -4,7 +4,7 @@ * [Chromium C++ style guide](c++/c++.md) * [Google Objective-C style guide](https://google.github.io/styleguide/objcguide.xml) - * [Java style guide for Android](https://sites.google.com/a/chromium.org/dev/developers/coding-style/java) + * [Java style guide for Android](java/java.md) * [GN style guide](../tools/gn/docs/style_guide.md) for build files Chromium also uses these languages to a lesser degree:
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 5391046..07b04a1 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -1242,6 +1242,24 @@ ] } ], + "NTPTilesInInstantService": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "win" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "NTPTilesInInstantService" + ] + } + ] + } + ], "NetDelayableH2AndQuicRequests": [ { "platforms": [
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index 89fb361..c34175f 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -1954,6 +1954,7 @@ crbug.com/626703 external/wpt/selection/selectAllChildren.html [ Pass Timeout ] crbug.com/666703 external/wpt/html/browsers/sandboxing/sandbox-disallow-same-origin.html [ Timeout ] crbug.com/626703 external/wpt/html/dom/documents/dom-tree-accessors/Document.currentScript.html [ Timeout ] +crbug.com/626703 external/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html [ Failure Pass ] crbug.com/655458 external/wpt/workers/constructors/SharedWorker/undefined-arguments.html [ Failure ] crbug.com/655458 external/wpt/workers/baseurl/alpha/worker.html [ Failure ] @@ -2015,14 +2016,6 @@ crbug.com/602693 external/wpt/service-workers/service-worker/invalid-header.https.html [ Skip ] crbug.com/602693 external/wpt/service-workers/service-worker/referer.https.html [ Skip ] -# Too large diff. Needs manual commit -crbug.com/683066 external/wpt/selection/addRange-00.html [ Failure ] -crbug.com/683066 external/wpt/selection/addRange-04.html [ Failure ] -crbug.com/683066 external/wpt/selection/addRange-16.html [ Failure ] -crbug.com/683066 external/wpt/selection/addRange-28.html [ Failure ] -crbug.com/683066 external/wpt/selection/addRange-32.html [ Failure ] -crbug.com/683066 external/wpt/selection/addRange-36.html [ Failure ] - # mojo-loading: This is an experimental feature. failing virtual tests are # listed below.
diff --git a/third_party/WebKit/LayoutTests/compositing/fixed-position-container-expected.html b/third_party/WebKit/LayoutTests/compositing/fixed-position-container-expected.html new file mode 100644 index 0000000..007c692 --- /dev/null +++ b/third_party/WebKit/LayoutTests/compositing/fixed-position-container-expected.html
@@ -0,0 +1,32 @@ +<!DOCTYPE html> + +<style> + #clip { + position: absolute; + overflow: hidden; + width: 300px; + height: 300px; + } + + #transform { + transform: scale(2, 2); + background-color: blue; + width: 200px; + height: 200px; + } + + #fixed { + position: fixed; + top: 50px; + left: 50px; + width: 100px; + height: 100px; + background-color: green; + } +</style> + +<div id='clip'> + <div id='transform'> + <div id='fixed'></div> + </div> +</div>
diff --git a/third_party/WebKit/LayoutTests/compositing/fixed-position-container.html b/third_party/WebKit/LayoutTests/compositing/fixed-position-container.html new file mode 100644 index 0000000..21f77bb7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/compositing/fixed-position-container.html
@@ -0,0 +1,33 @@ +<!DOCTYPE html> + +<style> + #clip { + position: absolute; + overflow: hidden; + width: 300px; + height: 300px; + } + + #transform { + transform: scale3d(2, 2, 1); + background-color: blue; + width: 200px; + height: 200px; + } + + #fixed { + will-change: transform; + position: fixed; + top: 50px; + left: 50px; + width: 100px; + height: 100px; + background-color: green; + } +</style> + +<div id='clip'> + <div id='transform'> + <div id='fixed'></div> + </div> +</div>
diff --git a/third_party/WebKit/LayoutTests/css3/flexbox/flex-flow-auto-margins-no-available-space-assert.html b/third_party/WebKit/LayoutTests/css3/flexbox/flex-flow-auto-margins-no-available-space-assert.html index e2d2687b..c049fa7 100644 --- a/third_party/WebKit/LayoutTests/css3/flexbox/flex-flow-auto-margins-no-available-space-assert.html +++ b/third_party/WebKit/LayoutTests/css3/flexbox/flex-flow-auto-margins-no-available-space-assert.html
@@ -10,7 +10,7 @@ } </style> <script src="../../resources/check-layout.js"></script> -<abbr data-expected-height=33554380> +<abbr data-expected-height=30210272> <input></input> </abbr> <p> crbug.com/380201: Don't shrink below border/padding when stretching children within a flexbox with no available space.</p>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-00-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-00-expected.txt index 5e86010..c8970682 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-00-expected.txt +++ b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-00-expected.txt
@@ -100,9 +100,9 @@ PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints @@ -112,9 +112,9 @@ PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -124,75 +124,75 @@ PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -200,92 +200,92 @@ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop " but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> @@ -294,14 +294,14 @@ FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests " but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -341,9 +341,9 @@ PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -379,23 +379,23 @@ PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> <meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -411,62 +411,62 @@ PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ </p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -480,35 +480,35 @@ PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints @@ -522,9 +522,9 @@ PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints @@ -538,23 +538,23 @@ PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ Ijklmnop QrstuvwxYzabcdef" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints @@ -566,23 +566,23 @@ PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ </p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -590,54 +590,54 @@ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop Qrstu" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> <me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -676,9 +676,9 @@ PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -717,9 +717,9 @@ PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -736,269 +736,269 @@ PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 0 but got 1 @@ -1008,9 +1008,9 @@ PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -1020,168 +1020,168 @@ PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> @@ -1189,15 +1189,15 @@ " FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests -" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -1237,9 +1237,9 @@ PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -1275,23 +1275,23 @@ PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> <meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -1307,62 +1307,62 @@ PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ </p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -1376,35 +1376,35 @@ PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints @@ -1418,9 +1418,9 @@ PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints @@ -1434,23 +1434,23 @@ PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 0 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ Ijklmnop -QrstuvwxYzabcdef" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +QrstuvwxYzabcdef" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints @@ -1462,78 +1462,78 @@ PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ </p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ </p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +Qrstu" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> <me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -1572,9 +1572,9 @@ PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -1613,9 +1613,9 @@ PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -1632,293 +1632,293 @@ PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "A" -FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints @@ -1928,9 +1928,9 @@ PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints @@ -1940,144 +1940,144 @@ PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> @@ -2085,15 +2085,15 @@ " FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests -" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -2133,9 +2133,9 @@ PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -2171,23 +2171,23 @@ PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> <meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -2203,62 +2203,62 @@ PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ </p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -2272,35 +2272,35 @@ PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints @@ -2314,9 +2314,9 @@ PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints @@ -2330,9 +2330,9 @@ PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 2 @@ -2346,9 +2346,9 @@ PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 7 but got 8 @@ -2360,78 +2360,78 @@ PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ </p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ </p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +Qrstu" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> <me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -2470,9 +2470,9 @@ PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -2511,9 +2511,9 @@ PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -2530,293 +2530,293 @@ PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈" -FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 8 but got 9 @@ -2826,9 +2826,9 @@ PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints @@ -2838,144 +2838,144 @@ PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop " but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> @@ -2983,15 +2983,15 @@ " FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests -" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -3031,9 +3031,9 @@ PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -3069,23 +3069,23 @@ PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> <meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -3101,62 +3101,62 @@ PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ </p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -3170,35 +3170,35 @@ PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints @@ -3212,9 +3212,9 @@ PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints @@ -3228,9 +3228,9 @@ PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 2 @@ -3244,9 +3244,9 @@ PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 7 but got 9 @@ -3258,78 +3258,78 @@ PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ </p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ </p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +Qrstu" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> <me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -3368,9 +3368,9 @@ PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -3409,9 +3409,9 @@ PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -3428,262 +3428,262 @@ PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "b̈c̈d̈e" -FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 Harness: the test ran to completion.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-04-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-04-expected.txt index 744f8148..057b4187 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-04-expected.txt +++ b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-04-expected.txt
@@ -104,83 +104,57 @@ PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints @@ -192,11 +166,9 @@ PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -208,166 +180,132 @@ PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 0 +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop " but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Text node "Ijklmnop +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests " but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -407,11 +345,9 @@ PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -447,29 +383,23 @@ PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> -<meta nam... but got Text node "Ijklmnop +<meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -485,133 +415,103 @@ PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Ijklmnop +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Ijklmnop +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ " but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints @@ -625,11 +525,9 @@ PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints @@ -643,11 +541,9 @@ PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -661,47 +557,37 @@ PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Ijklmnop +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... but got Text node "Ijklmnop +</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints @@ -715,63 +601,49 @@ PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Text node "Ijklmnop +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -810,11 +682,9 @@ PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -853,11 +723,9 @@ PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -874,423 +742,317 @@ PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Ijklmnop +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 0 but got 1 @@ -1302,11 +1064,9 @@ PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -1318,166 +1078,132 @@ PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop +" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Text node "Ijklmnop +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests -" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -1517,11 +1243,9 @@ PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -1557,29 +1281,23 @@ PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> -<meta nam... but got Text node "Ijklmnop +<meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -1595,133 +1313,103 @@ PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Ijklmnop +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Ijklmnop +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 0 but got 1 @@ -1735,11 +1423,9 @@ PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints @@ -1753,11 +1439,9 @@ PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -1771,47 +1455,37 @@ PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Ijklmnop +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... but got Text node "Ijklmnop +</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints @@ -1825,63 +1499,49 @@ PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Text node "Ijklmnop +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -1920,11 +1580,9 @@ PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -1963,11 +1621,9 @@ PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -1984,455 +1640,345 @@ PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Ijklmnop +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "I" -FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints @@ -2444,11 +1990,9 @@ PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints @@ -2462,133 +2006,103 @@ PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Text node "Ijklmnop +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests -" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -2628,11 +2142,9 @@ PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -2668,29 +2180,23 @@ PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> -<meta nam... but got Text node "Ijklmnop +<meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -2706,152 +2212,116 @@ PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Ijklmnop +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Ijklmnop +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints @@ -2865,11 +2335,9 @@ PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -2883,47 +2351,37 @@ PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Ijklmnop +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... but got Text node "Ijklmnop +</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints @@ -2937,63 +2395,49 @@ PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Text node "Ijklmnop +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -3032,11 +2476,9 @@ PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -3075,11 +2517,9 @@ PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -3096,475 +2536,345 @@ PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Ijklmnop +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop" -FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "klmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 8 but got 9 @@ -3577,13 +2887,9 @@ PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints @@ -3597,156 +2903,103 @@ PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Text node "Ijklmnop +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -3786,13 +3039,9 @@ PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -3828,34 +3077,23 @@ PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> -<meta nam... but got Text node "Ijklmnop +<meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -3871,178 +3109,116 @@ PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Ijklmnop +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Ijklmnop +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 8 but got 9 @@ -4057,13 +3233,9 @@ PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -4077,55 +3249,37 @@ PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Ijklmnop +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... but got Text node "Ijklmnop +</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints @@ -4139,74 +3293,49 @@ PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Text node "Ijklmnop +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -4245,13 +3374,9 @@ PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -4290,13 +3415,9 @@ PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -4313,402 +3434,262 @@ PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Ijklmnop +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "klmnop -" -FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 Harness: the test ran to completion.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-16-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-16-expected.txt index 2ec71a5..3641707 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-16-expected.txt +++ b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-16-expected.txt
@@ -66,35 +66,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -120,35 +94,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -174,35 +122,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -228,35 +150,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -282,35 +178,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -336,35 +206,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -390,35 +234,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -444,35 +262,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -499,353 +291,87 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 1 but got 2 @@ -873,35 +399,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -941,35 +441,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -1005,89 +479,23 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> -<meta nam... but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +<meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -1115,194 +523,48 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -1328,35 +590,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -1383,141 +619,35 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -1544,35 +674,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -1599,35 +703,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -1655,35 +733,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -1709,35 +761,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -1763,35 +789,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -1818,35 +818,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -1872,141 +846,35 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -2045,35 +913,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -2112,35 +954,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -2168,35 +984,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Element node <html><head><title>Selection.addRange() tests</title> @@ -2221,35 +1011,9 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Element node <html><head><title>Selection.addRange() tests</title> @@ -2274,1212 +1038,426 @@ PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 16 [document.documentElement, 1, document.documentElement, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop " but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -3495,11 +1473,9 @@ PASS Range 17 [document.head, 1, document.head, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -3539,16 +1515,14 @@ PASS Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ Ijklmnop QrstuvwxYzabcdefGhijklmn @@ -3562,18 +1536,14 @@ testAddRangeSubSet(16, 20); testDiv.style.display = "none"; " but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -3585,318 +1555,242 @@ PASS Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +</p><p id... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ Ijklmnop QrstuvwxYzabcdefGhijklmn" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ " but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ " but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ Ijklmnop" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ Ijklmnop QrstuvwxYzabcdef" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop Qrstu" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -3935,11 +1829,9 @@ PASS Range 17 [document.head, 1, document.head, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -3978,375 +1870,285 @@ PASS Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ Ijklmnop QrstuvwxYzabcdefGhijklmn" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 17 [document.head, 1, document.head, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 17 [document.head, 1, document.head, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 17 [document.head, 1, document.head, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 17 [document.head, 1, document.head, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... +FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 17 [document.head, 1, document.head, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -4362,15 +2164,9 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -4386,15 +2182,9 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -4410,15 +2200,9 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -4434,15 +2218,9 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -4458,15 +2236,9 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -4482,15 +2254,9 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -4506,15 +2272,9 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -4531,179 +2291,103 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -4743,15 +2427,9 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -4787,39 +2465,23 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> -<meta nam... but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +<meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -4835,84 +2497,48 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -4928,15 +2554,9 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -4953,61 +2573,35 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -5024,15 +2618,9 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -5049,15 +2637,9 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -5075,15 +2657,9 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -5099,15 +2675,9 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -5123,15 +2693,9 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -5148,15 +2712,9 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 0 but got 1 @@ -5170,61 +2728,35 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -5263,15 +2795,9 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -5310,15 +2836,9 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -5336,15 +2856,9 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -5359,15 +2873,9 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -5382,416 +2890,236 @@ PASS Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 18 [document.body, 0, document.body, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 18 [document.body, 0, document.body, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 18 [document.body, 0, document.body, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 18 [document.body, 0, document.body, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 18 [document.body, 0, document.body, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 @@ -5802,9 +3130,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -5814,9 +3142,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -5826,9 +3154,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -5838,9 +3166,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -5850,11 +3178,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -5864,11 +3190,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -5878,11 +3202,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -5892,13 +3214,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -5980,15 +3298,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -" but got object "Selection.addRange() tests - -" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -5998,39 +3310,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -6040,35 +3322,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -6078,11 +3334,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -6092,15 +3346,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -6146,11 +3394,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -6160,13 +3406,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -6200,13 +3442,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -6216,13 +3454,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -6232,13 +3466,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -6248,11 +3478,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -6262,11 +3490,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -6276,13 +3502,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -6292,11 +3514,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -6318,10 +3538,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -6331,38 +3550,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 35 [document, 0, document, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 35 [document, 0, document, 2]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -6372,38 +3562,9 @@ PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(16, 20); -testDiv.style.display = "none"; -" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 36 [document, 1, document, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 36 [document, 1, document, 2]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -6412,17 +3573,10 @@ FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -6431,12 +3585,10 @@ FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -6445,12 +3597,10 @@ FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range +PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range PASS Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-28-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-28-expected.txt index fe745f12..4ca869f 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-28-expected.txt +++ b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-28-expected.txt
@@ -86,49 +86,33 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -141,13 +125,9 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -160,13 +140,9 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -180,13 +156,9 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -200,13 +172,9 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -220,13 +188,9 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -241,127 +205,87 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> @@ -369,21 +293,15 @@ " FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests -" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -423,13 +341,9 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -465,33 +379,23 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> <meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -507,90 +411,62 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ </p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -606,51 +482,35 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -665,13 +525,9 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -686,13 +542,9 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -706,13 +558,9 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -727,13 +575,9 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -747,13 +591,9 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -768,71 +608,49 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> <me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -871,13 +689,9 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -916,13 +730,9 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -939,13 +749,9 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -958,13 +764,9 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -977,353 +779,243 @@ PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 28 [paras[0].firstChild, 3, paras[3], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -1337,11 +1029,9 @@ PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -1355,11 +1045,9 @@ PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -1373,11 +1061,9 @@ PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -1391,206 +1077,160 @@ PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests -" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -1630,11 +1270,9 @@ PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -1670,29 +1308,23 @@ PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> -<meta nam... but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +<meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -1708,62 +1340,48 @@ PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -1777,11 +1395,9 @@ PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -1795,45 +1411,35 @@ PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -1849,11 +1455,9 @@ PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -1869,11 +1473,9 @@ PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -1891,11 +1493,9 @@ PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints @@ -1907,100 +1507,78 @@ PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +Qrstu" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -2039,11 +1617,9 @@ PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -2082,11 +1658,9 @@ PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -2103,618 +1677,468 @@ PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d" -FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 29 [paras[0], 0, paras[0].firstChild, 7] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests -" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -2754,11 +2178,9 @@ PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -2794,29 +2216,23 @@ PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> -<meta nam... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +<meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -2832,171 +2248,129 @@ PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +Ijklmnop" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Element node <p id="e" style="display:none">Ghijklmn</p> @@ -3010,29 +2384,23 @@ PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -3044,11 +2412,9 @@ PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Element node <p id="e" style="display:none">Ghijklmn</p> @@ -3062,63 +2428,49 @@ PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -3157,11 +2509,9 @@ PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -3200,11 +2550,9 @@ PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -3221,11 +2569,9 @@ PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -3238,11 +2584,9 @@ PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -3255,403 +2599,291 @@ PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 30 [testDiv, 2, paras[4], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 30 [testDiv, 2, paras[4], 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -3666,13 +2898,9 @@ PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -3687,13 +2915,9 @@ PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -3708,13 +2932,9 @@ PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -3730,156 +2950,103 @@ PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests -" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -3919,13 +3086,9 @@ PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -3961,34 +3124,23 @@ PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> -<meta nam... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +<meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -4004,156 +3156,103 @@ PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -4168,13 +3267,9 @@ PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -4189,13 +3284,9 @@ PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -4209,34 +3300,23 @@ PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 1 @@ -4249,13 +3329,9 @@ PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints @@ -4269,74 +3345,49 @@ PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -4375,13 +3426,9 @@ PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -4420,13 +3467,9 @@ PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -4443,13 +3486,9 @@ PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -4463,382 +3502,249 @@ PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ijklmnop -Qrstu" -FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 31 [testDiv, 1, paras[2].firstChild, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 Harness: the test ran to completion.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-32-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-32-expected.txt index 2b292bb..6863e90 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-32-expected.txt +++ b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-32-expected.txt
@@ -84,258 +84,192 @@ PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop " but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> @@ -353,11 +287,9 @@ PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -397,11 +329,9 @@ PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -437,29 +367,23 @@ PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> -<meta nam... but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +<meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -477,246 +401,186 @@ PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ " but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ " but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ Ijklmnop" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ Ijklmnop QrstuvwxYzabcdef" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop Qrstu" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints @@ -728,45 +592,35 @@ PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -805,11 +659,9 @@ PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -848,362 +700,278 @@ PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ Ijklmnop QrstuvwxYzabcdefGhijklmn" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 32 [document.documentElement, 1, document.body, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... +FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 32 [document.documentElement, 1, document.body, 0] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 @@ -1214,9 +982,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 0 -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1226,9 +994,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "A" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endOffset of the Selection's last Range must match the added Range expected 2 but got 1 -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1238,9 +1006,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "b̈c̈d̈" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1250,9 +1018,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "b̈c̈d̈e" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 2 -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1262,11 +1030,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1276,11 +1042,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "I" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1290,11 +1054,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "klmnop" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1304,13 +1066,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "klmnop -" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1392,15 +1150,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -" but got object "Selection.addRange() tests - -" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1410,39 +1162,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1452,35 +1174,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1490,11 +1186,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <head><title>Selection.addRange() tests</title> -<meta nam... -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1504,15 +1198,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1558,11 +1246,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1572,13 +1258,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1612,13 +1294,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1628,13 +1306,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, endContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Ijklmnop -" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1644,13 +1318,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" but got object "̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdef" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 3 -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1660,11 +1330,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Äb̈c̈d" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1674,11 +1342,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "QrstuvwxYzabcdefGhijklmn" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1688,13 +1354,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ijklmnop -Qrstu" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1704,11 +1366,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <html><head><title>Selection.addRange() tests</title> -<me... -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1730,10 +1390,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1743,38 +1402,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 35 [document, 0, document, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 35 [document, 0, document, 2]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1784,38 +1414,9 @@ PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 36 [document, 1, document, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 36 [document, 1, document, 2]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1824,17 +1425,10 @@ FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1843,12 +1437,10 @@ FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -1857,12 +1449,10 @@ FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range +PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range PASS Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 assert_equals: rangeCount must be 1 expected 1 but got 0 FAIL Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_not_equals: Cannot proceed with tests if rangeCount is 0 got disallowed value 0 @@ -2082,236 +1672,213 @@ PASS Range 34 [document, 0, document, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 34 [document, 0, document, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Document node with 2 children +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 34 [document, 0, document, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Document node with 2 children +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 34 [document, 0, document, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Document node with 2 children +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 34 [document, 0, document, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Document node with 2 children +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop " but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 34 [document, 0, document, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Document node with 2 children +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests " but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 FAIL Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Document node with 2 children +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests Äb̈c̈d̈ëf̈g̈ḧ @@ -2327,20 +1894,19 @@ testAddRangeSubSet(32, 36); testDiv.style.display = "none"; " but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 FAIL Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Document node with 2 children +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ Ijklmnop QrstuvwxYzabcdefGhijklmn @@ -2354,273 +1920,248 @@ testAddRangeSubSet(32, 36); testDiv.style.display = "none"; " but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 34 [document, 0, document, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> -<meta nam... but got Document node with 2 children +<meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 FAIL Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id... but got Document node with 2 children +</p><p id... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ Ijklmnop QrstuvwxYzabcdefGhijklmn" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 34 [document, 0, document, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Document node with 2 children +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 FAIL Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Document node with 2 children +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ " but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ " but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ Ijklmnop" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 3 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "̈c̈d̈ëf̈g̈ḧ Ijklmnop QrstuvwxYzabcdef" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 FAIL Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Document node with 2 children +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 34 [document, 0, document, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... but got Document node with 2 children +</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "QrstuvwxYzabcdefGhijklmn" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 FAIL Range 34 [document, 0, document, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... but got Document node with 2 children +</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop Qrstu" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 34 [document, 0, document, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Document node with 2 children +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -2631,10 +2172,9 @@ PASS Range 34 [document, 0, document, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -2673,10 +2213,9 @@ PASS Range 34 [document, 0, document, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 FAIL Range 34 [document, 0, document, 1] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 1 but got 0 @@ -2715,335 +2254,285 @@ PASS Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... but got Document node with 2 children +</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ Ijklmnop QrstuvwxYzabcdefGhijklmn" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 34 [document, 0, document, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 34 [document, 0, document, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 34 [document, 0, document, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 34 [document, 0, document, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 34 [document, 0, document, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 34 [document, 0, document, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 34 [document, 0, document, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 34 [document, 0, document, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 34 [document, 0, document, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 34 [document, 0, document, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 34 [document, 0, document, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" -FAIL Range 34 [document, 0, document, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 34 [document, 0, document, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 34 [document, 0, document, 1] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -3069,38 +2558,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -3126,38 +2586,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -3183,38 +2614,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -3240,38 +2642,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -3297,38 +2670,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -3354,38 +2698,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -3411,38 +2726,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -3469,374 +2755,87 @@ PASS Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> @@ -3864,38 +2863,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> @@ -3935,38 +2905,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> @@ -4004,38 +2945,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> @@ -4061,38 +2973,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -4120,206 +3003,48 @@ PASS Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -4345,38 +3070,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -4403,150 +3099,35 @@ PASS Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -4573,38 +3154,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -4631,38 +3183,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -4690,38 +3213,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -4747,38 +3241,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -4804,38 +3269,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -4862,38 +3298,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> @@ -4919,94 +3326,22 @@ PASS Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 1 but got 2 @@ -5031,38 +3366,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -5101,38 +3407,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 1 but got 0 @@ -5171,38 +3448,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -5230,38 +3478,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Document node with 2 children @@ -5286,38 +3505,9 @@ PASS Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 FAIL Range 35 [document, 0, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Document node with 2 children @@ -5342,1010 +3532,236 @@ PASS Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 35 [document, 0, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 35 [document, 0, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 35 [document, 0, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; -" -FAIL Range 35 [document, 0, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 35 [document, 0, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 35 [document, 0, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 35 [document, 0, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 35 [document, 0, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 35 [document, 0, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 35 [document, 0, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Document node with 2 children -FAIL Range 35 [document, 0, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(32, 36); -testDiv.style.display = "none"; +FAIL Range 35 [document, 0, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 35 [document, 0, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 35 [document, 0, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 35 [document, 0, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 35 [document, 0, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 Harness: the test ran to completion.
diff --git a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-36-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-36-expected.txt index fa0a3da..20e7c1bb 100644 --- a/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-36-expected.txt +++ b/third_party/WebKit/LayoutTests/external/wpt/selection/addRange-36-expected.txt
@@ -77,38 +77,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -134,38 +105,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -191,38 +133,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -248,38 +161,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -305,38 +189,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -362,38 +217,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -419,38 +245,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -476,38 +273,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -534,374 +302,87 @@ PASS Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> @@ -929,38 +410,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> @@ -1000,38 +452,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> @@ -1069,38 +492,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> @@ -1126,38 +520,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -1185,206 +550,48 @@ PASS Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -1410,38 +617,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -1468,150 +646,35 @@ PASS Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -1638,38 +701,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -1696,38 +730,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -1755,38 +760,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -1812,38 +788,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -1869,38 +816,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -1927,38 +845,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> @@ -1984,94 +873,22 @@ PASS Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endOffset of the Selection's last Range must match the added Range expected 1 but got 2 @@ -2096,38 +913,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -2166,38 +954,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -2236,38 +995,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -2295,38 +1025,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Document node with 2 children @@ -2351,38 +1052,9 @@ PASS Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 FAIL Range 36 [document, 1, document, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Document node with 2 children @@ -2407,1024 +1079,243 @@ PASS Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 36 [document, 1, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 PASS Range 36 [document, 1, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints -FAIL Range 36 [document, 1, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; -" -FAIL Range 36 [document, 1, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 36 [document, 1, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 36 [document, 1, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 36 [document, 1, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 36 [document, 1, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 36 [document, 1, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 36 [document, 1, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Document node with 2 children -FAIL Range 36 [document, 1, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Selection.addRange() tests - -Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn - - - - - -"use strict"; - -testAddRangeSubSet(36, 40); -testDiv.style.display = "none"; +FAIL Range 36 [document, 1, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ " -FAIL Range 36 [document, 1, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Document node with 2 children +FAIL Range 36 [document, 1, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 36 [document, 1, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 36 [document, 1, document, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -3439,17 +1330,10 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -3464,17 +1348,10 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -3489,17 +1366,10 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -3514,17 +1384,10 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -3539,17 +1402,10 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -3564,17 +1420,10 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -3589,17 +1438,10 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop @@ -3615,188 +1457,104 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests -" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -3835,17 +1593,10 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -3880,42 +1631,24 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> -<meta nam... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +<meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -3930,89 +1663,49 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -4027,17 +1720,10 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -4053,65 +1739,36 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -4127,17 +1784,10 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -4153,17 +1803,10 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ @@ -4180,17 +1823,10 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -4205,17 +1841,10 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 0 @@ -4228,17 +1857,10 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 1 but got 0 @@ -4252,90 +1874,50 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -4373,17 +1955,10 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -4421,17 +1996,10 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -4447,17 +2015,10 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -4471,17 +2032,10 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -4495,681 +2049,443 @@ FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 37 [testDiv, 0, comment, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 37 [testDiv, 0, comment, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 37 [testDiv, 0, comment, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 37 [testDiv, 0, comment, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop -QrstuvwxYzabcdefGhijklmn" -FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 37 [testDiv, 0, comment, 5] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Text node "Qrstuvwx" +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Text node "Qrstuvwx" +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests -" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -5208,12 +2524,10 @@ FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -5248,28 +2562,24 @@ FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> -<meta nam... but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +<meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -5284,154 +2594,130 @@ FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Qrstuvwx" +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +Ijklmnop" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -5445,28 +2731,24 @@ FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <p id="e" style="display:none">Ghijklmn</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -5478,12 +2760,10 @@ FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Text node "Qrstuvwx" but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -5497,58 +2777,50 @@ FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -5586,12 +2858,10 @@ FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -5629,12 +2899,10 @@ FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -5650,12 +2918,10 @@ FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -5666,12 +2932,10 @@ FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Text node "Qrstuvwx" @@ -5681,519 +2945,443 @@ FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "uvwxYzabcdefGhijklmn" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Qrstuvwx" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "uvwxYzabcdefGhijklmn" -FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Text node "Qrstuvwx" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 38 [paras[2].firstChild, 4, comment, 2] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "A" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 2 but got 6 +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "b̈c̈d̈e" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in rangeCount being 1 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "I" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 5 [paras[1].firstChild, 0, paras[1].firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 6 [paras[1].firstChild, 2, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in rangeCount being 1 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Ijklmnop -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "klmnop -" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 7 [paras[1].firstChild, 2, paras[1].firstChild, 9]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 8 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "O" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 9 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Opqrstuv" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "qrstuv" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 10 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 11 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "E" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 12 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Efghijkl" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "ghijkl" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 13 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in rangeCount being 1 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Element node <p id="d" style="display:none">Yzabcdef</p> +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Selection.addRange() tests -" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 14 [document.documentElement, 0, document.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -6232,12 +3420,10 @@ FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 15 [document.documentElement, 0, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in rangeCount being 1 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -6272,28 +3458,24 @@ FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 16 [document.documentElement, 1, document.documentElement, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 17 [document.head, 1, document.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in rangeCount being 1 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title>Selection.addRange() tests</title> -<meta nam... but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +<meta nam... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 17 [document.head, 1, document.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 17 [document.head, 1, document.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 18 [document.body, 0, document.body, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 18 [document.body, 0, document.body, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in rangeCount being 1 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 18 [document.body, 0, document.body, 1]: second addRange() must result in the selection's last range having the specified endpoints @@ -6308,154 +3490,130 @@ FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 18 [document.body, 0, document.body, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 19 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <head><title></title></head> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 20 [foreignDoc.head, 1, foreignDoc.head, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 21 [foreignDoc.body, 0, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in rangeCount being 1 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 22 [paras[0], 0, paras[0], 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in rangeCount being 1 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Element node <p id="d" style="display:none">Yzabcdef</p> +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 23 [paras[0], 0, paras[0], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 24 [detachedPara1, 0, detachedPara1, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p>Opqrstuv</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Opqrstuv" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 25 [detachedPara1, 0, detachedPara1, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 26 [paras[0].firstChild, 0, paras[1].firstChild, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d̈ëf̈g̈ḧ -Ijklmnop" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +Ijklmnop" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 27 [paras[0].firstChild, 0, paras[1].firstChild, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in rangeCount being 1 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <p id="d" style="display:none">Yzabcdef</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -6469,28 +3627,24 @@ FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 28 [paras[0].firstChild, 3, paras[3], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in rangeCount being 1 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p> but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +</p> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Äb̈c̈d" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 29 [paras[0], 0, paras[0].firstChild, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in rangeCount being 1 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Element node <p id="e" style="display:none">Ghijklmn</p> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -6502,75 +3656,65 @@ FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 30 [testDiv, 2, paras[4], 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in rangeCount being 1 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... but got Element node <p id="d" style="display:none">Yzabcdef</p> +</p><p id="b" s... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ijklmnop -Qrstu" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +Qrstu" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 31 [testDiv, 1, paras[2].firstChild, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in rangeCount being 1 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title>Selection.addRange() tests</title> -<me... but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +<me... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 32 [document.documentElement, 1, document.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <html><head><title></title></head><body><p>Efghijkl</p><p... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 33 [foreignDoc.documentElement, 1, foreignDoc.body, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 34 [document, 0, document, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 34 [document, 0, document, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 34 [document, 0, document, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 34 [document, 0, document, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 34 [document, 0, document, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 34 [document, 0, document, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 2 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 34 [document, 0, document, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 34 [document, 0, document, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 34 [document, 0, document, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 35 [document, 0, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 35 [document, 0, document, 2]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 35 [document, 0, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 35 [document, 0, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 35 [document, 0, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 35 [document, 0, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 35 [document, 0, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -6608,12 +3752,10 @@ FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 35 [document, 0, document, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 36 [document, 1, document, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 36 [document, 1, document, 2]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 36 [document, 1, document, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 36 [document, 1, document, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 36 [document, 1, document, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 36 [document, 1, document, 2]: second addRange() must result in rangeCount being 1 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 36 [document, 1, document, 2]: second addRange() must result in the selection's last range having the specified endpoints @@ -6651,12 +3793,10 @@ FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 36 [document, 1, document, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 37 [testDiv, 0, comment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 37 [testDiv, 0, comment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in rangeCount being 1 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 37 [testDiv, 0, comment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -6672,12 +3812,10 @@ FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 37 [testDiv, 0, comment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in rangeCount being 1 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -6688,12 +3826,10 @@ FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 38 [paras[2].firstChild, 4, comment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in rangeCount being 1 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ @@ -6704,273 +3840,237 @@ FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 39 [paras[3], 1, comment, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 40 [foreignDoc, 0, foreignDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 3 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now." but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 41 [foreignDoc, 1, foreignComment, 2]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Element node <body><p>Efghijkl</p><p>Mnopqrst</p>I admit that I harbor... but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "EfghijklMnopqrstI admit that I harbor doubts about w" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 42 [foreignDoc.body, 0, foreignTextNode, 36]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 43 [xmlDoc, 0, xmlDoc, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Document node with 4 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "do re mi fa so la ti" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 44 [xmlDoc, 1, xmlComment, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Uvwxyzab" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Uvwxyzab" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 45 [detachedTextNode, 0, detachedTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 46 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Cdefghij" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Cdefghij" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 47 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 48 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Text node "Klmnopqr" but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Klmnopqr" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 49 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 50 [detachedComment, 3, detachedComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--Stuvwxyz--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 51 [detachedComment, 5, detachedComment, 5]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 52 [detachedForeignComment, 0, detachedForeignComment, 1]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--×ריה יהודה--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 53 [detachedForeignComment, 4, detachedForeignComment, 4]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected Comment node <!--בן ×—×™×™× ×ליעזר--> but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 54 [detachedXmlComment, 2, detachedXmlComment, 6]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 55 [docfrag, 0, docfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 56 [foreignDocfrag, 0, foreignDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 PASS Range 39 [paras[3], 1, comment, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints assert_equals: endContainer of the Selection's last Range must match the added Range expected Comment node <!--Alphabet soup?--> but got Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ -</p><p id="b" s... -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "Ghijklmn" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range assert_equals: After mutating the first added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range assert_equals: After first addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range having the specified endpoints +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: first addRange() must result in the selection's last range being the same object we added +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the first added range must modify the Selection's last Range +PASS Range 39 [paras[3], 1, comment, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the first added Range PASS Range 39 [paras[3], 1, comment, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must not throw exceptions or modify the range it's given PASS Range 39 [paras[3], 1, comment, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in rangeCount being 1 -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Element node <p id="d" style="display:none">Yzabcdef</p> -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "Ghijklmn" -FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startContainer of the Selection's last Range must match the added Range expected Text node "Äb̈c̈d̈ëf̈g̈ḧ -" but got Element node <p id="d" style="display:none">Yzabcdef</p> +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range having the specified endpoints assert_equals: startContainer of the Selection's last Range must match the added Range expected DocumentFragment node with 0 children but got Text node "Äb̈c̈d̈ëf̈g̈ḧ +" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: second addRange() must result in the selection's last range being the same object we added assert_equals: getRangeAt(rangeCount - 1) must return the same object we added expected object "" but got object "" +FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the second added range must modify the Selection's last Range assert_equals: After mutating the second added Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 FAIL Range 39 [paras[3], 1, comment, 8] followed by Range 57 [xmlDocfrag, 0, xmlDocfrag, 0]: modifying the Selection's last Range must modify the second added Range assert_equals: After second addRange(), after mutating the Selection's last Range, startOffset of the Selection's last Range must match the added Range expected 0 but got 6 Harness: the test ran to completion.
diff --git a/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter-basic-expected.txt b/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter-basic-expected.txt deleted file mode 100644 index cf64c4e9..0000000 --- a/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter-basic-expected.txt +++ /dev/null
@@ -1,40 +0,0 @@ -Test Basic IIRFilterNode Properties - -On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". - - -PASS context.createIIRFilter is defined. -PASS numberOfInputs is equal to 1. -PASS numberOfOutputs is equal to 1. -PASS channelCountMode is equal to "max". -PASS channelInterpretation is equal to "speakers". -PASS All basic IIRFilter parameters are correct. - -PASS createIIRFilter() threw TypeError: Failed to execute 'createIIRFilter' on 'BaseAudioContext': 2 arguments required, but only 0 present.. -PASS createIIRFilter(new Float32Array(1)) threw TypeError: Failed to execute 'createIIRFilter' on 'BaseAudioContext': 2 arguments required, but only 1 present.. -PASS createIIRFilter(null, null) threw TypeError: Failed to execute 'createIIRFilter' on 'BaseAudioContext': The 1st argument is neither an array, nor does it have indexed properties.. -PASS createIIRFilter([], []) threw NotSupportedError: Failed to execute 'createIIRFilter' on 'BaseAudioContext': The number of feedback coefficients provided (0) is outside the range [1, 20].. -PASS createIIRFilter([1], []) threw NotSupportedError: Failed to execute 'createIIRFilter' on 'BaseAudioContext': The number of feedback coefficients provided (0) is outside the range [1, 20].. -PASS createIIRFilter([], [1]) threw NotSupportedError: Failed to execute 'createIIRFilter' on 'BaseAudioContext': The number of feedforward coefficients provided (0) is outside the range [1, 20].. -PASS createIIRFilter(new Float32Array(20), new Float32Array(20)) did not throw an exception. -PASS createIIRFilter(new Float32Array(21), [1]) threw NotSupportedError: Failed to execute 'createIIRFilter' on 'BaseAudioContext': The number of feedforward coefficients provided (21) is outside the range [1, 20].. -PASS createIIRFilter([1], new Float32Array(21)) threw NotSupportedError: Failed to execute 'createIIRFilter' on 'BaseAudioContext': The number of feedback coefficients provided (21) is outside the range [1, 20].. -PASS createIIRFilter([1], new Float32Array(2)) threw InvalidStateError: Failed to execute 'createIIRFilter' on 'BaseAudioContext': First feedback coefficient cannot be zero.. -PASS createIIRFilter(new Float32Array(10), [1]) threw InvalidStateError: Failed to execute 'createIIRFilter' on 'BaseAudioContext': At least one feedforward coefficient must be non-zero.. -PASS createIIRFilter([1], [1, NaN, Infinity]) threw InvalidStateError: Failed to execute 'createIIRFilter' on 'BaseAudioContext': The feedback coefficient 1 is infinite.. -PASS createIIRFilter([1, NaN, Infinity], [1]) threw InvalidStateError: Failed to execute 'createIIRFilter' on 'BaseAudioContext': The feedforward coefficient 1 is infinite.. -PASS createIIRFilter([1, 'abc', []], [1]) threw InvalidStateError: Failed to execute 'createIIRFilter' on 'BaseAudioContext': The feedforward coefficient 1 is not a number.. -PASS All exceptions for createIIRFilter were correctly thrown. - -PASS getFrequencyResponse(null, new Float32Array(1), new Float32Array(1)) threw TypeError: Failed to execute 'getFrequencyResponse' on 'IIRFilterNode': parameter 1 is not of type 'Float32Array'.. -PASS getFrequencyResponse(new Float32Array(1), null, new Float32Array(1)) threw TypeError: Failed to execute 'getFrequencyResponse' on 'IIRFilterNode': parameter 2 is not of type 'Float32Array'.. -PASS getFrequencyResponse(new Float32Array(1), new Float32Array(1), null) threw TypeError: Failed to execute 'getFrequencyResponse' on 'IIRFilterNode': parameter 3 is not of type 'Float32Array'.. -PASS getFrequencyResponse(new Float32Array(10), new Float32Array(1), new Float32Array(20)) threw NotSupportedError: Failed to execute 'getFrequencyResponse' on 'IIRFilterNode': The magResponse length provided (1) is less than the minimum bound (10).. -PASS getFrequencyResponse(new Float32Array(10), new Float32Array(20), new Float32Array(1)) threw NotSupportedError: Failed to execute 'getFrequencyResponse' on 'IIRFilterNode': The phaseResponse length provided (1) is less than the minimum bound (10).. -PASS getFrequencyResponse(new Float32Array(10), new Float32Array(20), new Float32Array(30)) did not throw an exception. -PASS getFrequencyResponse exceptions handled correctly. - -PASS successfullyParsed is true - -TEST COMPLETE -
diff --git a/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter-basic.html b/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter-basic.html index 7d725f44..f318697 100644 --- a/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter-basic.html +++ b/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter-basic.html
@@ -2,16 +2,14 @@ <html> <head> <title>Test Basic IIRFilterNode Properties</title> - <script src="../../resources/js-test.js"></script> + <script src="../../resources/testharness.js"></script> + <script src="../../resources/testharnessreport.js"></script> <script src="../resources/audit-util.js"></script> <script src="../resources/audio-testing.js"></script> </head> <body> <script> - description("Test Basic IIRFilterNode Properties"); - window.jsTestIsAsync = true; - var sampleRate = 48000; var testFrames = 100; @@ -27,7 +25,9 @@ }); audit.defineTask("existence", function (done) { - shouldBeDefined("context.createIIRFilter"); + Should("context.createIIRFilter exists", + context.createIIRFilter != undefined) + .beEqualTo(true); done(); }); @@ -44,10 +44,8 @@ success = Should("channelCountMode", f.channelCountMode).beEqualTo("max") && success; success = Should("channelInterpretation", f.channelInterpretation).beEqualTo("speakers") && success; - if (success) - testPassed("All basic IIRFilter parameters are correct.\n"); - else - testFailed("Some basic IIRFilter parameter was not correct.\n"); + Should("Basic IRRFilter parameters", success) + .summarize("were all correct", "were not all correct"); done(); }); @@ -133,10 +131,9 @@ context.createIIRFilter([1, "abc", []], [1]); }).throw("InvalidStateError") && success; - if (success) - testPassed("All exceptions for createIIRFilter were correctly thrown.\n"); - else - testFailed("Some exceptions for createIIRFilter were not thrown as expected.\n"); + Should("Exceptions for createIIRFilter", success) + .summarize("were all correctly thrown", + "were not all correctly thrown"); done(); }); @@ -191,20 +188,12 @@ 30)); }).notThrow() && success; - if (success) - testPassed("getFrequencyResponse exceptions handled correctly.\n"); - else - testFailed("getFrequencyResponse exceptions not handled correctly.\n"); - - done(); - }); - audit.defineTask("finish", function (done) { - finishJSTest(); + Should("getFrequencyResponse exceptions handled", success) + .summarize("correctly", "incorrectly"); done(); }); audit.runTasks(); - successfullyParsed = true; </script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter-expected.txt b/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter-expected.txt deleted file mode 100644 index c03845d..0000000 --- a/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter-expected.txt +++ /dev/null
@@ -1,38 +0,0 @@ -Test Basic IIRFilterNode Operation - -On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". - - -PASS createIIRFilter with normalized coefficients did not throw an exception. -PASS createIIRFilter with unnormalized coefficients did not throw an exception. -PASS Output of IIR filter with unnormalized coefficients equals [1,-0.8999999761581421,0.8100000023841858,-0.7289999723434448,0.6560999751091003,-0.5904899835586548,0.5314409732818604,-0.4782969057559967,0.4304672181606293,-0.3874204754829407,0.34867843985557556,-0.3138105869293213,0.2824295461177826,-0.25418657064437866,0.22876793146133423,-0.20589113235473633,...] with an element-wise tolerance of 2.1958e-38. -PASS IIRFilter coefficients correctly normalized. - -PASS IIR 1-zero output equals [0.5,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...] with an element-wise tolerance of 0. -PASS IIR 1-pole output equals [1,-0.9,0.81,-0.7290000000000001,0.6561000000000001,-0.5904900000000002,0.5314410000000002,-0.47829690000000014,0.43046721000000016,-0.38742048900000015,0.34867844010000015,-0.31381059609000017,0.28242953648100017,-0.25418658283290013,0.22876792454961012,-0.2058911320946491,...] with an element-wise tolerance of {absoluteThreshold: 0, relativeThreshold: 5.723e-8}. -PASS IIRFilter for Biquad lowpass equals [0.00052089,0.0025959,0.0067191,0.012853,0.020955,0.030980,0.042881,0.056604,0.072096,0.089298,0.10815,0.12859,0.15055,0.17397,0.19877,0.22488,...] with an element-wise tolerance of {absoluteThreshold: 0, relativeThreshold: 0.000049834}. -PASS SNR for IIRFIlter for Biquad lowpass is greater than or equal to 91.221. -PASS IIRFilter for Biquad highpass equals [0.99229,0.97595,0.95782,0.93795,0.91641,0.89328,0.86861,0.84249,0.81499,0.78619,0.75616,0.72499,0.69276,0.65954,0.62543,0.59051,...] with an element-wise tolerance of {absoluteThreshold: 0.0000029, relativeThreshold: 0.00003}. -PASS SNR for IIRFIlter for Biquad highpass is greater than or equal to 105.459. -PASS IIRFilter for Biquad bandpass equals [0.0022847,0.0068389,0.011358,0.015833,0.020254,0.024612,0.028899,0.033106,0.037224,0.041246,0.045163,0.048967,0.052652,0.056209,0.059632,0.062915,...] with an element-wise tolerance of {absoluteThreshold: 2e-7, relativeThreshold: 0.00087}. -PASS SNR for IIRFIlter for Biquad bandpass is greater than or equal to 104.06. -PASS IIRFilter for Biquad notch equals [0.99772,0.99316,0.98864,0.98417,0.97975,0.97539,0.97110,0.96689,0.96278,0.95875,0.95484,0.95103,0.94735,0.94379,0.94037,0.93708,...] with an element-wise tolerance of {absoluteThreshold: 0, relativeThreshold: 0.0000422}. -PASS SNR for IIRFIlter for Biquad notch is greater than or equal to 91.312. -PASS IIRFilter for Biquad allpass equals [0.99543,0.98632,0.97728,0.96833,0.95949,0.95078,0.94220,0.93379,0.92555,0.91751,0.90967,0.90207,0.89470,0.88758,0.88074,0.87417,...] with an element-wise tolerance of {absoluteThreshold: 0, relativeThreshold: 0.0000431}. -PASS SNR for IIRFIlter for Biquad allpass is greater than or equal to 91.319. -PASS IIRFilter for Biquad lowshelf equals [1.0191,1.0576,1.0966,1.1362,1.1763,1.2168,1.2575,1.2986,1.3398,1.3812,1.4227,1.4642,1.5057,1.5471,1.5884,1.6296,...] with an element-wise tolerance of {absoluteThreshold: 0, relativeThreshold: 0.0000298}. -PASS SNR for IIRFIlter for Biquad lowshelf is greater than or equal to 90.609. -PASS IIRFilter for Biquad highshelf equals [3.1031,2.9859,2.8713,2.7596,2.6507,2.5450,2.4425,2.3434,2.2476,2.1553,2.0665,1.9812,1.8995,1.8214,1.7467,1.6756,...] with an element-wise tolerance of {absoluteThreshold: 0, relativeThreshold: 0.0000124}. -PASS SNR for IIRFIlter for Biquad highshelf is greater than or equal to 103.159. -PASS IIRFilter for Biquad peaking equals [1.0028,1.0083,1.0138,1.0193,1.0247,1.0301,1.0354,1.0406,1.0456,1.0506,1.0555,1.0602,1.0648,1.0693,1.0736,1.0777,...] with an element-wise tolerance of {absoluteThreshold: 0, relativeThreshold: 0.0000505}. -PASS SNR for IIRFIlter for Biquad peaking is greater than or equal to 91.504. -PASS Max difference between IIR and Biquad on channel 0 is less than or equal to 0.000037671. -PASS Max difference between IIR and Biquad on channel 1 is less than or equal to 0.000030071. -PASS Max difference between IIR and Biquad on channel 2 is less than or equal to 0.000026241. -PASS IIRFilter correctly processed 3-channel input. -PASS 4-th order IIRFilter (biquad ref) equals [2.6831e-7,0.0000021317,0.0000084527,0.000023002,0.000049588,0.000091769,0.00015285,0.00023587,0.00034360,0.00047856,0.00064299,0.00083884,0.0010678,0.0013314,0.0016307,0.0019666,...] with an element-wise tolerance of {absoluteThreshold: 1.59e-7, relativeThreshold: 0.0000211}. -PASS SNR of 4-th order IIRFilter (biquad ref) is greater than or equal to 108.947. -PASS successfullyParsed is true - -TEST COMPLETE -
diff --git a/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter-getFrequencyResponse-expected.txt b/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter-getFrequencyResponse-expected.txt deleted file mode 100644 index 7839435..0000000 --- a/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter-getFrequencyResponse-expected.txt +++ /dev/null
@@ -1,17 +0,0 @@ -Test IIRFilter getFrequencyResponse() functionality - -On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". - - -PASS 1-pole IIR Magnitude Response equals [10,9.995561599731445,9.982281684875488,9.96026611328125,9.929688453674316,9.890785217285156,9.843852043151855,9.789238929748535,9.727341651916504,9.658592224121094,9.583455085754395,9.502418518066406,9.415983200073242,9.32465934753418,9.228958129882812,9.12938404083252,...] with an element-wise tolerance of 0.0000028611. -PASS 1-pole IIR Phase Response equals [0,-0.02826550230383873,-0.05647812411189079,-0.08458554744720459,-0.11253655701875687,-0.1402815729379654,-0.16777309775352478,-0.1949661672115326,-0.2218186855316162,-0.2482917755842209,-0.27434995770454407,-0.29996123909950256,-0.3250974416732788,-0.3497338891029358,-0.3738497197628021,-0.3974274694919586,...] with an element-wise tolerance of 1.7882e-7. -PASS 1-pole IIR response matched expected response. - -PASS IIR Magnitude Response equals [1,1.0028345584869385,1.0113478899002075,1.025554895401001,1.0454282760620117,1.070805311203003,1.10122549533844,1.1356719732284546,1.1721950769424438,1.2074543237686157,1.2363563776016235,1.2522097826004028,1.247962236404419,1.218644618988037,1.1639058589935303,1.0886648893356323,...] with an element-wise tolerance of 0.000027419. -PASS IIR Phase Response equals [0,-0.061315324157476425,-0.12391137331724167,-0.1891222447156906,-0.2583869397640228,-0.3332937955856323,-0.4156070649623871,-0.5072502493858337,-0.6102025508880615,-0.7262400388717651,-0.8564491868019104,-1.0005061626434326,-1.155927300453186,-1.3177809715270996,-1.4793895483016968,-1.6339597702026367,...] with an element-wise tolerance of 0.000027657. -PASS IIR response matched equivalent lowpass Biquad response. - -PASS successfullyParsed is true - -TEST COMPLETE -
diff --git a/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter-getFrequencyResponse.html b/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter-getFrequencyResponse.html index 44a0644..b0c46303 100644 --- a/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter-getFrequencyResponse.html +++ b/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter-getFrequencyResponse.html
@@ -2,7 +2,8 @@ <html> <head> <title>Test IIRFilter getFrequencyResponse() functionality</title> - <script src="../../resources/js-test.js"></script> + <script src="../../resources/testharness.js"></script> + <script src="../../resources/testharnessreport.js"></script> <script src="../resources/audit-util.js"></script> <script src="../resources/audio-testing.js"></script> <script src="../resources/biquad-filters.js"></script> @@ -10,9 +11,6 @@ <body> <script> - description("Test IIRFilter getFrequencyResponse() functionality"); - window.jsTestIsAsync = true; - var sampleRate = 48000; // Some short duration; we're not actually looking at the rendered output. var testDurationSec = 0.01; @@ -76,11 +74,10 @@ success = Should("1-pole IIR Magnitude Response", iirMag).beCloseToArray(trueMag, 2.8611e-6); success = Should("1-pole IIR Phase Response", iirPhase).beCloseToArray(truePhase, 1.7882e-7) && success; - if (success) - testPassed("1-pole IIR response matched expected response.\n"); - else - testFailed("1-pole IIR response did not match expected response.\n"); + Should('1-pole IIR response', success) + .summarize( + 'matched expected response', 'did not match expected response'); done(); }); @@ -112,21 +109,14 @@ success = Should("IIR Magnitude Response", iirMag).beCloseToArray(biquadMag, 2.7419e-5); success = Should("IIR Phase Response", iirPhase).beCloseToArray(biquadPhase, 2.7657e-5) && success; - if (success) - testPassed("IIR response matched equivalent " + biquad.type + " Biquad response.\n"); - else - testFailed("IIR response did not equivalent " + biquad.type + " Biquad response.\n"); - - done(); - }); - - audit.defineTask("finish", function (done) { - finishJSTest(); + var suffix = " equivalent " + biquad.type + " Biquad response"; + Should("IIR response", success) + .summarize("matched" + suffix, + "did not match" + suffix); done(); }); audit.runTasks(); - successfullyParsed = true; </script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter.html b/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter.html index c6c9c91f..2053af5 100644 --- a/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter.html +++ b/third_party/WebKit/LayoutTests/webaudio/IIRFilter/iirfilter.html
@@ -2,7 +2,8 @@ <html> <head> <title>Test Basic IIRFilterNode Operation</title> - <script src="../../resources/js-test.js"></script> + <script src="../../resources/testharness.js"></script> + <script src="../../resources/testharnessreport.js"></script> <script src="../resources/audit-util.js"></script> <script src="../resources/audio-testing.js"></script> <script src="../resources/biquad-filters.js"></script> @@ -10,9 +11,6 @@ <body> <script> - description("Test Basic IIRFilterNode Operation"); - window.jsTestIsAsync = true; - var sampleRate = 48000; var testDurationSec = 1; var testFrames = testDurationSec * sampleRate; @@ -88,10 +86,8 @@ // IIRFilterNode and the BiquadFilterNode. success = Should("Output of IIR filter with unnormalized coefficients", iir2Data) .beCloseToArray(iir1Data, 2.1958e-38) && success; - if (success) - testPassed("IIRFilter coefficients correctly normalized.\n"); - else - testFailed("IIRFilter coefficients not correctly normalized.\n"); + Should("IIRFilter coefficients normalized", success) + .summarize("correctly", "incorrectly"); }).then(done); }); @@ -367,13 +363,10 @@ }).beLessThanOrEqualTo(errorThresholds[channel]); } - if (success) { - testPassed("IIRFilter correctly processed " + result.numberOfChannels + - "-channel input."); - } else { - testFailed("IIRFilter failed to correctly process " + result.numberOfChannels + - "-channel input."); - } + Should("IIRFIlter processed " + result.numberOfChannels + + "-channel input", + success) + .summarize("correctly", "incorrectly"); }).then(done); }); @@ -566,13 +559,7 @@ }).then(done); }); - audit.defineTask("finish", function (done) { - finishJSTest(); - done(); - }); - audit.runTasks(); - successfullyParsed = true; </script> </body> </html>
diff --git a/third_party/WebKit/LayoutTests/webaudio/resources/oscillator-testing.js b/third_party/WebKit/LayoutTests/webaudio/resources/oscillator-testing.js index d4e2ec0..6323ab84 100644 --- a/third_party/WebKit/LayoutTests/webaudio/resources/oscillator-testing.js +++ b/third_party/WebKit/LayoutTests/webaudio/resources/oscillator-testing.js
@@ -20,16 +20,14 @@ // <!doctype html> // <html> // <head> -// <script src="resources/compatibility.js"></script> -// <script src="resources/buffer-loader.js"></script> -// <script src="../resources/js-test.js"></script> -// <script src="resources/oscillator-testing.js"></script> -// <script src="resources/audio-testing.js"></script> +// <script src="../resources/testharness.js"></script> +// <script src="resources/oscillator-testing.js"></script> +// <script src="resources/audit-util.js"></script> // </head> // <body> -// <script> -// OscillatorTestingUtils.createNewReference("sine"); -// </script> +// <script> +// OscillatorTestingUtils.createNewReference("sine"); +// </script> // </body> // </html>
diff --git a/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModules.cpp b/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModules.cpp index 7f2bdfc..f8239852 100644 --- a/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModules.cpp +++ b/third_party/WebKit/Source/bindings/modules/v8/V8BindingForModules.cpp
@@ -96,7 +96,7 @@ switch (key->getType()) { case IDBKey::InvalidType: - case IDBKey::MinType: + case IDBKey::TypeEnumMax: ASSERT_NOT_REACHED(); return v8Undefined(); case IDBKey::NumberType:
diff --git a/third_party/WebKit/Source/core/css/CSSKeyframesRule.cpp b/third_party/WebKit/Source/core/css/CSSKeyframesRule.cpp index 88cae61..f80fd371 100644 --- a/third_party/WebKit/Source/core/css/CSSKeyframesRule.cpp +++ b/third_party/WebKit/Source/core/css/CSSKeyframesRule.cpp
@@ -173,8 +173,12 @@ CSSKeyframeRule* CSSKeyframesRule::anonymousIndexedGetter( unsigned index) const { - if (UseCounter* useCounter = UseCounter::getFrom(parentStyleSheet())) - useCounter->count(UseCounter::CSSKeyframesRuleAnonymousIndexedGetter); + const Document* parentDocument = + CSSStyleSheet::singleOwnerDocument(parentStyleSheet()); + if (parentDocument) { + UseCounter::count(*parentDocument, + UseCounter::CSSKeyframesRuleAnonymousIndexedGetter); + } return item(index); }
diff --git a/third_party/WebKit/Source/core/css/CSSPrimitiveValueMappings.h b/third_party/WebKit/Source/core/css/CSSPrimitiveValueMappings.h index 3cf65c87..ffbc1f7 100644 --- a/third_party/WebKit/Source/core/css/CSSPrimitiveValueMappings.h +++ b/third_party/WebKit/Source/core/css/CSSPrimitiveValueMappings.h
@@ -1959,9 +1959,6 @@ case BreakAuto: m_valueID = CSSValueAuto; break; - case BreakAlways: - m_valueID = CSSValueAlways; - break; case BreakAvoid: m_valueID = CSSValueAvoid; break; @@ -2001,8 +1998,6 @@ return BreakAuto; case CSSValueAvoid: return BreakAvoid; - case CSSValueAlways: - return BreakAlways; case CSSValueAvoidPage: return BreakAvoidPage; case CSSValuePage:
diff --git a/third_party/WebKit/Source/core/css/CSSStyleSheet.cpp b/third_party/WebKit/Source/core/css/CSSStyleSheet.cpp index c7ddcfa..22d89cc 100644 --- a/third_party/WebKit/Source/core/css/CSSStyleSheet.cpp +++ b/third_party/WebKit/Source/core/css/CSSStyleSheet.cpp
@@ -80,6 +80,14 @@ } #endif +// static +const Document* CSSStyleSheet::singleOwnerDocument( + const CSSStyleSheet* styleSheet) { + if (styleSheet) + return StyleSheetContents::singleOwnerDocument(styleSheet->contents()); + return nullptr; +} + CSSStyleSheet* CSSStyleSheet::create(StyleSheetContents* sheet, CSSImportRule* ownerRule) { return new CSSStyleSheet(sheet, ownerRule);
diff --git a/third_party/WebKit/Source/core/css/CSSStyleSheet.h b/third_party/WebKit/Source/core/css/CSSStyleSheet.h index 60958a0..b8102a42 100644 --- a/third_party/WebKit/Source/core/css/CSSStyleSheet.h +++ b/third_party/WebKit/Source/core/css/CSSStyleSheet.h
@@ -47,6 +47,8 @@ WTF_MAKE_NONCOPYABLE(CSSStyleSheet); public: + static const Document* singleOwnerDocument(const CSSStyleSheet*); + static CSSStyleSheet* create(StyleSheetContents*, CSSImportRule* ownerRule = nullptr); static CSSStyleSheet* create(StyleSheetContents*, Node& ownerNode);
diff --git a/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp b/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp index db6eb1b9..efe1bb1f 100644 --- a/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp +++ b/third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp
@@ -1906,37 +1906,43 @@ return list; } -static EBreak mapToPageBreakValue(EBreak genericBreakValue) { - switch (genericBreakValue) { +// Returns a suitable value for the page-break-(before|after|inside) property, +// given the computed value of the more general break-(before|after|inside) +// property. +static CSSValue* valueForPageBreak(EBreak breakValue) { + switch (breakValue) { case BreakAvoidColumn: case BreakColumn: case BreakRecto: case BreakVerso: - return BreakAuto; + return CSSIdentifierValue::create(CSSValueAuto); case BreakPage: - return BreakAlways; + return CSSIdentifierValue::create(CSSValueAlways); case BreakAvoidPage: - return BreakAvoid; + return CSSIdentifierValue::create(CSSValueAvoid); default: - return genericBreakValue; + return CSSIdentifierValue::create(breakValue); } } -static EBreak mapToColumnBreakValue(EBreak genericBreakValue) { - switch (genericBreakValue) { +// Returns a suitable value for the -webkit-column-break-(before|after|inside) +// property, given the computed value of the more general +// break-(before|after|inside) property. +static CSSValue* valueForWebkitColumnBreak(EBreak breakValue) { + switch (breakValue) { case BreakAvoidPage: case BreakLeft: case BreakPage: case BreakRecto: case BreakRight: case BreakVerso: - return BreakAuto; + return CSSIdentifierValue::create(CSSValueAuto); case BreakColumn: - return BreakAlways; + return CSSIdentifierValue::create(CSSValueAlways); case BreakAvoidColumn: - return BreakAvoid; + return CSSIdentifierValue::create(CSSValueAvoid); default: - return genericBreakValue; + return CSSIdentifierValue::create(breakValue); } } @@ -2237,14 +2243,11 @@ return CSSIdentifierValue::create(style.getColumnSpan() ? CSSValueAll : CSSValueNone); case CSSPropertyWebkitColumnBreakAfter: - return CSSIdentifierValue::create( - mapToColumnBreakValue(style.breakAfter())); + return valueForWebkitColumnBreak(style.breakAfter()); case CSSPropertyWebkitColumnBreakBefore: - return CSSIdentifierValue::create( - mapToColumnBreakValue(style.breakBefore())); + return valueForWebkitColumnBreak(style.breakBefore()); case CSSPropertyWebkitColumnBreakInside: - return CSSIdentifierValue::create( - mapToColumnBreakValue(style.breakInside())); + return valueForWebkitColumnBreak(style.breakInside()); case CSSPropertyColumnWidth: if (style.hasAutoColumnWidth()) return CSSIdentifierValue::create(CSSValueAuto); @@ -2660,14 +2663,11 @@ case CSSPropertyBreakInside: return CSSIdentifierValue::create(style.breakInside()); case CSSPropertyPageBreakAfter: - return CSSIdentifierValue::create( - mapToPageBreakValue(style.breakAfter())); + return valueForPageBreak(style.breakAfter()); case CSSPropertyPageBreakBefore: - return CSSIdentifierValue::create( - mapToPageBreakValue(style.breakBefore())); + return valueForPageBreak(style.breakBefore()); case CSSPropertyPageBreakInside: - return CSSIdentifierValue::create( - mapToPageBreakValue(style.breakInside())); + return valueForPageBreak(style.breakInside()); case CSSPropertyPosition: return CSSIdentifierValue::create(style.position()); case CSSPropertyQuotes:
diff --git a/third_party/WebKit/Source/core/css/FontFace.cpp b/third_party/WebKit/Source/core/css/FontFace.cpp index 790bd98..8aabfcb5 100644 --- a/third_party/WebKit/Source/core/css/FontFace.cpp +++ b/third_party/WebKit/Source/core/css/FontFace.cpp
@@ -69,8 +69,7 @@ static const CSSValue* parseCSSValue(const Document* document, const String& value, CSSPropertyID propertyID) { - CSSParserContext* context = - CSSParserContext::create(*document, UseCounter::getFrom(document)); + CSSParserContext* context = CSSParserContext::create(*document, document); return CSSParser::parseFontFaceDescriptor(propertyID, value, context); }
diff --git a/third_party/WebKit/Source/core/css/StyleSheetContents.cpp b/third_party/WebKit/Source/core/css/StyleSheetContents.cpp index 0e38cea..0005ba3 100644 --- a/third_party/WebKit/Source/core/css/StyleSheetContents.cpp +++ b/third_party/WebKit/Source/core/css/StyleSheetContents.cpp
@@ -39,6 +39,16 @@ namespace blink { +// static +const Document* StyleSheetContents::singleOwnerDocument( + const StyleSheetContents* styleSheetContents) { + // TODO(https://crbug.com/242125): We may want to handle stylesheets that have + // multiple owners when this is used for UseCounter. + if (styleSheetContents && styleSheetContents->hasSingleOwnerNode()) + return styleSheetContents->singleOwnerDocument(); + return nullptr; +} + // Rough size estimate for the memory cache. unsigned StyleSheetContents::estimatedSizeInBytes() const { // Note that this does not take into account size of the strings hanging from
diff --git a/third_party/WebKit/Source/core/css/StyleSheetContents.h b/third_party/WebKit/Source/core/css/StyleSheetContents.h index caf0fcb..c8e3b4d 100644 --- a/third_party/WebKit/Source/core/css/StyleSheetContents.h +++ b/third_party/WebKit/Source/core/css/StyleSheetContents.h
@@ -61,6 +61,8 @@ return new StyleSheetContents(ownerRule, originalURL, context); } + static const Document* singleOwnerDocument(const StyleSheetContents*); + ~StyleSheetContents(); const CSSParserContext* parserContext() const { return m_parserContext; }
diff --git a/third_party/WebKit/Source/core/css/parser/CSSAtRuleID.cpp b/third_party/WebKit/Source/core/css/parser/CSSAtRuleID.cpp index b5605a55..a684e33b 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSAtRuleID.cpp +++ b/third_party/WebKit/Source/core/css/parser/CSSAtRuleID.cpp
@@ -4,6 +4,7 @@ #include "core/css/parser/CSSAtRuleID.h" +#include "core/css/parser/CSSParserContext.h" #include "core/frame/UseCounter.h" namespace blink { @@ -34,8 +35,7 @@ return CSSAtRuleInvalid; } -void countAtRule(UseCounter* useCounter, CSSAtRuleID ruleId) { - ASSERT(useCounter); +void countAtRule(const CSSParserContext* context, CSSAtRuleID ruleId) { UseCounter::Feature feature; switch (ruleId) { @@ -81,7 +81,7 @@ ASSERT_NOT_REACHED(); return; } - useCounter->count(feature); + context->count(feature); } } // namespace blink
diff --git a/third_party/WebKit/Source/core/css/parser/CSSAtRuleID.h b/third_party/WebKit/Source/core/css/parser/CSSAtRuleID.h index 8ffe1a9..c67cce0 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSAtRuleID.h +++ b/third_party/WebKit/Source/core/css/parser/CSSAtRuleID.h
@@ -9,7 +9,7 @@ namespace blink { -class UseCounter; +class CSSParserContext; enum CSSAtRuleID { CSSAtRuleInvalid = 0, @@ -30,7 +30,7 @@ CSSAtRuleID cssAtRuleID(StringView name); -void countAtRule(UseCounter*, CSSAtRuleID); +void countAtRule(const CSSParserContext*, CSSAtRuleID); } // namespace blink
diff --git a/third_party/WebKit/Source/core/css/parser/CSSLazyParsingState.cpp b/third_party/WebKit/Source/core/css/parser/CSSLazyParsingState.cpp index c5ed81c..43ab191 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSLazyParsingState.cpp +++ b/third_party/WebKit/Source/core/css/parser/CSSLazyParsingState.cpp
@@ -45,9 +45,8 @@ if (!m_document) m_document = m_owningContents->anyOwnerDocument(); - UseCounter* useCounter = UseCounter::getFrom(m_document); - if (useCounter != m_context->useCounter()) - m_context = CSSParserContext::create(m_context, useCounter); + if (!m_context->isDocumentHandleEqual(m_document)) + m_context = CSSParserContext::create(m_context, m_document); return m_context; }
diff --git a/third_party/WebKit/Source/core/css/parser/CSSLazyParsingTest.cpp b/third_party/WebKit/Source/core/css/parser/CSSLazyParsingTest.cpp index 7d5fbf82..62386cc 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSLazyParsingTest.cpp +++ b/third_party/WebKit/Source/core/css/parser/CSSLazyParsingTest.cpp
@@ -120,7 +120,7 @@ DummyPageHolder::create(IntSize(500, 500)); CSSParserContext* context = CSSParserContext::create( HTMLStandardMode, CSSParserContext::DynamicProfile, - UseCounter::getFrom(&dummyHolder->document())); + &dummyHolder->document()); m_cachedContents = StyleSheetContents::create(context); { CSSStyleSheet* sheet =
diff --git a/third_party/WebKit/Source/core/css/parser/CSSParserContext.cpp b/third_party/WebKit/Source/core/css/parser/CSSParserContext.cpp index dae63bff1..2ac0321 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSParserContext.cpp +++ b/third_party/WebKit/Source/core/css/parser/CSSParserContext.cpp
@@ -6,6 +6,7 @@ #include "core/css/CSSStyleSheet.h" #include "core/css/StyleSheetContents.h" +#include "core/frame/FrameHost.h" #include "core/frame/Settings.h" #include "core/frame/csp/ContentSecurityPolicy.h" #include "core/html/imports/HTMLImportsController.h" @@ -16,41 +17,42 @@ CSSParserContext* CSSParserContext::createWithStyleSheet( const CSSParserContext* other, const CSSStyleSheet* styleSheet) { - return CSSParserContext::create(other, UseCounter::getFrom(styleSheet)); + return CSSParserContext::create( + other, CSSStyleSheet::singleOwnerDocument(styleSheet)); } // static CSSParserContext* CSSParserContext::createWithStyleSheetContents( const CSSParserContext* other, const StyleSheetContents* styleSheetContents) { - return CSSParserContext::create(other, - UseCounter::getFrom(styleSheetContents)); + return CSSParserContext::create( + other, StyleSheetContents::singleOwnerDocument(styleSheetContents)); } // static CSSParserContext* CSSParserContext::create(const CSSParserContext* other, - UseCounter* useCounter) { + const Document* m_document) { return new CSSParserContext( other->m_baseURL, other->m_charset, other->m_mode, other->m_matchMode, other->m_profile, other->m_referrer, other->m_isHTMLDocument, other->m_useLegacyBackgroundSizeShorthandBehavior, - other->m_shouldCheckContentSecurityPolicy, useCounter); + other->m_shouldCheckContentSecurityPolicy, m_document); } // static CSSParserContext* CSSParserContext::create(CSSParserMode mode, SelectorProfile profile, - UseCounter* useCounter) { + const Document* m_document) { return new CSSParserContext(KURL(), emptyString, mode, mode, profile, Referrer(), false, false, - DoNotCheckContentSecurityPolicy, useCounter); + DoNotCheckContentSecurityPolicy, m_document); } // static CSSParserContext* CSSParserContext::create(const Document& document, - UseCounter* useCounter) { + const Document* m_document) { return CSSParserContext::create(document, KURL(), emptyString, DynamicProfile, - useCounter); + m_document); } // static @@ -58,7 +60,7 @@ const KURL& baseURLOverride, const String& charset, SelectorProfile profile, - UseCounter* useCounter) { + const Document* m_document) { const KURL baseURL = baseURLOverride.isNull() ? document.baseURL() : baseURLOverride; @@ -89,7 +91,7 @@ return new CSSParserContext(baseURL, charset, mode, matchMode, profile, referrer, document.isHTMLDocument(), useLegacyBackgroundSizeShorthandBehavior, - policyDisposition, useCounter); + policyDisposition, m_document); } CSSParserContext::CSSParserContext( @@ -102,7 +104,7 @@ bool isHTMLDocument, bool useLegacyBackgroundSizeShorthandBehavior, ContentSecurityPolicyDisposition policyDisposition, - UseCounter* useCounter) + const Document* m_document) : m_baseURL(baseURL), m_charset(charset), m_mode(mode), @@ -113,7 +115,7 @@ m_useLegacyBackgroundSizeShorthandBehavior( useLegacyBackgroundSizeShorthandBehavior), m_shouldCheckContentSecurityPolicy(policyDisposition), - m_useCounter(useCounter) {} + m_document(m_document) {} bool CSSParserContext::operator==(const CSSParserContext& other) const { return m_baseURL == other.m_baseURL && m_charset == other.m_charset && @@ -138,4 +140,25 @@ return KURL(baseURL(), url, charset()); } +void CSSParserContext::count(UseCounter::Feature feature) const { + if (isUseCounterRecordingEnabled()) + UseCounter::count(*m_document, feature); +} + +void CSSParserContext::count(CSSParserMode mode, CSSPropertyID property) const { + if (isUseCounterRecordingEnabled() && m_document->frameHost()) { + UseCounter* useCounter = &m_document->frameHost()->useCounter(); + if (useCounter) + useCounter->count(mode, property); + } +} + +bool CSSParserContext::isDocumentHandleEqual(const Document* other) const { + return m_document.get() == other; +} + +DEFINE_TRACE(CSSParserContext) { + visitor->trace(m_document); +} + } // namespace blink
diff --git a/third_party/WebKit/Source/core/css/parser/CSSParserContext.h b/third_party/WebKit/Source/core/css/parser/CSSParserContext.h index 33381ec..c1babda 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSParserContext.h +++ b/third_party/WebKit/Source/core/css/parser/CSSParserContext.h
@@ -7,6 +7,8 @@ #include "core/CoreExport.h" #include "core/css/parser/CSSParserMode.h" +#include "core/dom/Document.h" +#include "core/frame/UseCounter.h" #include "platform/loader/fetch/ResourceLoaderOptions.h" #include "platform/weborigin/KURL.h" #include "platform/weborigin/Referrer.h" @@ -14,9 +16,7 @@ namespace blink { class CSSStyleSheet; -class Document; class StyleSheetContents; -class UseCounter; class CORE_EXPORT CSSParserContext : public GarbageCollectedFinalized<CSSParserContext> { @@ -25,7 +25,7 @@ enum SelectorProfile { DynamicProfile, StaticProfile }; // All three of these factories copy the context and override the current - // UseCounter handle. + // Document handle used for UseCounter. static CSSParserContext* createWithStyleSheet(const CSSParserContext*, const CSSStyleSheet*); static CSSParserContext* createWithStyleSheetContents( @@ -34,20 +34,19 @@ // FIXME: This constructor shouldn't exist if we properly piped the UseCounter // through the CSS subsystem. Currently the UseCounter life time is too crazy // and we need a way to override it. - static CSSParserContext* create(const CSSParserContext* other, UseCounter*); + static CSSParserContext* create(const CSSParserContext* other, + const Document* useCounterDocument); static CSSParserContext* create(CSSParserMode, SelectorProfile = DynamicProfile, - UseCounter* = nullptr); - // FIXME: We shouldn't need the UseCounter argument as we could infer it from - // the Document but some callers want to disable use counting (e.g. the - // WebInspector). - static CSSParserContext* create(const Document&, UseCounter*); + const Document* useCounterDocument = nullptr); + static CSSParserContext* create(const Document&, + const Document* useCounterDocument); static CSSParserContext* create(const Document&, const KURL& baseURLOverride = KURL(), const String& charset = emptyString, SelectorProfile = DynamicProfile, - UseCounter* = nullptr); + const Document* useCounterDocument = nullptr); bool operator==(const CSSParserContext&) const; bool operator!=(const CSSParserContext& other) const { @@ -80,16 +79,16 @@ KURL completeURL(const String& url) const; - // This may return nullptr if counting is disabled. - // See comments on constructors. - UseCounter* useCounter() const { return m_useCounter; } - bool isUseCounterRecordingEnabled() const { return m_useCounter; } + void count(UseCounter::Feature) const; + void count(CSSParserMode, CSSPropertyID) const; + bool isUseCounterRecordingEnabled() const { return m_document; } + bool isDocumentHandleEqual(const Document* other) const; ContentSecurityPolicyDisposition shouldCheckContentSecurityPolicy() const { return m_shouldCheckContentSecurityPolicy; } - DEFINE_INLINE_TRACE() {} + DECLARE_TRACE(); private: CSSParserContext(const KURL& baseURL, @@ -101,7 +100,7 @@ bool isHTMLDocument, bool useLegacyBackgroundSizeShorthandBehavior, ContentSecurityPolicyDisposition, - UseCounter*); + const Document* useCounterDocument); KURL m_baseURL; String m_charset; @@ -113,7 +112,7 @@ bool m_useLegacyBackgroundSizeShorthandBehavior; ContentSecurityPolicyDisposition m_shouldCheckContentSecurityPolicy; - UseCounter* m_useCounter; + WeakMember<const Document> m_document; }; CORE_EXPORT const CSSParserContext* strictCSSParserContext();
diff --git a/third_party/WebKit/Source/core/css/parser/CSSParserImpl.cpp b/third_party/WebKit/Source/core/css/parser/CSSParserImpl.cpp index 76269e9..8a3fb88 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSParserImpl.cpp +++ b/third_party/WebKit/Source/core/css/parser/CSSParserImpl.cpp
@@ -156,8 +156,7 @@ Element* element) { Document& document = element->document(); CSSParserContext* context = CSSParserContext::create( - document.elementSheet().contents()->parserContext(), - UseCounter::getFrom(&document)); + document.elementSheet().contents()->parserContext(), &document); CSSParserMode mode = element->isHTMLElement() && !document.inQuirksMode() ? HTMLStandardMode : HTMLQuirksMode; @@ -453,7 +452,7 @@ CSSParserTokenRange prelude = range.makeSubRange(preludeStart, &range.peek()); CSSAtRuleID id = cssAtRuleID(name); if (id != CSSAtRuleInvalid && m_context->isUseCounterRecordingEnabled()) - countAtRule(m_context->useCounter(), id); + countAtRule(m_context, id); if (range.atEnd() || range.peek().type() == SemicolonToken) { range.consume(); @@ -701,8 +700,7 @@ if (nameToken.type() == IdentToken) { name = nameToken.value().toString(); } else if (nameToken.type() == StringToken && webkitPrefixed) { - if (m_context->isUseCounterRecordingEnabled()) - m_context->useCounter()->count(UseCounter::QuotedKeyframesRule); + m_context->count(UseCounter::QuotedKeyframesRule); name = nameToken.value().toString(); } else { return nullptr; // Parse error; expected ident token in @keyframes header
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp index c4ad6da..d58e1163 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp +++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
@@ -126,8 +126,8 @@ } // This doesn't count UA style sheets - if (parseSuccess && context->isUseCounterRecordingEnabled()) - context->useCounter()->count(context->mode(), unresolvedProperty); + if (parseSuccess) + context->count(context->mode(), unresolvedProperty); if (!parseSuccess) parsedProperties.shrink(parsedPropertiesSize); @@ -497,8 +497,7 @@ if (allowQuotedName && range.peek().type() == StringToken) { // Legacy support for strings in prefixed animations. - if (context->isUseCounterRecordingEnabled()) - context->useCounter()->count(UseCounter::QuotedAnimationName); + context->count(UseCounter::QuotedAnimationName); const CSSParserToken& token = range.consumeIncludingWhitespace(); if (equalIgnoringASCIICase(token.value(), "none")) @@ -793,8 +792,7 @@ parsedValue = parseSingleShadow(args, context->mode(), false, false); } else { if (args.atEnd()) { - if (context->isUseCounterRecordingEnabled()) - context->useCounter()->count(UseCounter::CSSFilterFunctionNoArguments); + context->count(UseCounter::CSSFilterFunctionNoArguments); return filterValue; } if (filterType == CSSValueBrightness) { @@ -934,12 +932,11 @@ CSSValue* value = consumePathOrNone(range); // Count when we receive a valid path other than 'none'. - if (context->isUseCounterRecordingEnabled() && value && - !value->isIdentifierValue()) { + if (value && !value->isIdentifierValue()) { if (isMotionPath) { - context->useCounter()->count(UseCounter::CSSMotionInEffect); + context->count(UseCounter::CSSMotionInEffect); } else { - context->useCounter()->count(UseCounter::CSSOffsetInEffect); + context->count(UseCounter::CSSOffsetInEffect); } } return value; @@ -1013,10 +1010,7 @@ double perspective; if (!consumeNumberRaw(args, perspective) || perspective < 0) return false; - if (context->isUseCounterRecordingEnabled()) { - context->useCounter()->count( - UseCounter::UnitlessPerspectiveInTransformProperty); - } + context->count(UseCounter::UnitlessPerspectiveInTransformProperty); parsedValue = CSSPrimitiveValue::create( perspective, CSSPrimitiveValue::UnitType::Pixels); } @@ -1162,10 +1156,7 @@ double perspective; if (!consumeNumberRaw(range, perspective)) return nullptr; - if (context->isUseCounterRecordingEnabled()) { - context->useCounter()->count( - UseCounter::UnitlessPerspectiveInPerspectiveProperty); - } + context->count(UseCounter::UnitlessPerspectiveInPerspectiveProperty); parsedValue = CSSPrimitiveValue::create( perspective, CSSPrimitiveValue::UnitType::Pixels); } @@ -2016,21 +2007,20 @@ else feature = UseCounter::CSSValueAppearanceOthers; } - context->useCounter()->count(feature); + context->count(feature); break; } case CSSPropertyWebkitUserModify: { switch (valueID) { case CSSValueReadOnly: - context->useCounter()->count(UseCounter::CSSValueUserModifyReadOnly); + context->count(UseCounter::CSSValueUserModifyReadOnly); break; case CSSValueReadWrite: - context->useCounter()->count(UseCounter::CSSValueUserModifyReadWrite); + context->count(UseCounter::CSSValueUserModifyReadWrite); break; case CSSValueReadWritePlaintextOnly: - context->useCounter()->count( - UseCounter::CSSValueUserModifyReadWritePlaintextOnly); + context->count(UseCounter::CSSValueUserModifyReadWritePlaintextOnly); break; default: NOTREACHED();
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp index b691724..ed50200 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp +++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParserHelpers.cpp
@@ -1200,16 +1200,12 @@ result = consumeRadialGradient(args, context->mode(), Repeating); } else if (id == CSSValueWebkitLinearGradient) { // FIXME: This should send a deprecation message. - if (context->isUseCounterRecordingEnabled()) - context->useCounter()->count(UseCounter::DeprecatedWebKitLinearGradient); + context->count(UseCounter::DeprecatedWebKitLinearGradient); result = consumeLinearGradient(args, context->mode(), NonRepeating, CSSPrefixedLinearGradient); } else if (id == CSSValueWebkitRepeatingLinearGradient) { // FIXME: This should send a deprecation message. - if (context->isUseCounterRecordingEnabled()) { - context->useCounter()->count( - UseCounter::DeprecatedWebKitRepeatingLinearGradient); - } + context->count(UseCounter::DeprecatedWebKitRepeatingLinearGradient); result = consumeLinearGradient(args, context->mode(), Repeating, CSSPrefixedLinearGradient); } else if (id == CSSValueRepeatingLinearGradient) { @@ -1220,20 +1216,15 @@ CSSLinearGradient); } else if (id == CSSValueWebkitGradient) { // FIXME: This should send a deprecation message. - if (context->isUseCounterRecordingEnabled()) - context->useCounter()->count(UseCounter::DeprecatedWebKitGradient); + context->count(UseCounter::DeprecatedWebKitGradient); result = consumeDeprecatedGradient(args, context->mode()); } else if (id == CSSValueWebkitRadialGradient) { // FIXME: This should send a deprecation message. - if (context->isUseCounterRecordingEnabled()) - context->useCounter()->count(UseCounter::DeprecatedWebKitRadialGradient); + context->count(UseCounter::DeprecatedWebKitRadialGradient); result = consumeDeprecatedRadialGradient(args, context->mode(), NonRepeating); } else if (id == CSSValueWebkitRepeatingRadialGradient) { - if (context->isUseCounterRecordingEnabled()) { - context->useCounter()->count( - UseCounter::DeprecatedWebKitRepeatingRadialGradient); - } + context->count(UseCounter::DeprecatedWebKitRepeatingRadialGradient); result = consumeDeprecatedRadialGradient(args, context->mode(), Repeating); } else if (id == CSSValueWebkitCrossFade) { result = consumeCrossFade(args, context);
diff --git a/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.cpp index 6de81c9..9143aa3 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.cpp +++ b/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.cpp
@@ -808,7 +808,7 @@ void CSSSelectorParser::recordUsageAndDeprecations( const CSSSelectorList& selectorList) { - if (!m_context->useCounter()) + if (!m_context->isUseCounterRecordingEnabled()) return; for (const CSSSelector* selector = selectorList.first(); selector; @@ -904,11 +904,11 @@ Deprecation::countDeprecation(*m_styleSheet->anyOwnerDocument(), feature); } else { - m_context->useCounter()->count(feature); + m_context->count(feature); } } if (current->relation() == CSSSelector::IndirectAdjacent) - m_context->useCounter()->count(UseCounter::CSSSelectorIndirectAdjacent); + m_context->count(UseCounter::CSSSelectorIndirectAdjacent); if (current->selectorList()) recordUsageAndDeprecations(*current->selectorList()); }
diff --git a/third_party/WebKit/Source/core/css/properties/CSSPropertyAPICursor.cpp b/third_party/WebKit/Source/core/css/properties/CSSPropertyAPICursor.cpp index 918f758..dc663be 100644 --- a/third_party/WebKit/Source/core/css/properties/CSSPropertyAPICursor.cpp +++ b/third_party/WebKit/Source/core/css/properties/CSSPropertyAPICursor.cpp
@@ -42,11 +42,11 @@ } CSSValueID id = range.peek().id(); - if (!range.atEnd() && context->isUseCounterRecordingEnabled()) { + if (!range.atEnd()) { if (id == CSSValueWebkitZoomIn) - context->useCounter()->count(UseCounter::PrefixedCursorZoomIn); + context->count(UseCounter::PrefixedCursorZoomIn); else if (id == CSSValueWebkitZoomOut) - context->useCounter()->count(UseCounter::PrefixedCursorZoomOut); + context->count(UseCounter::PrefixedCursorZoomOut); } CSSValue* cursorType = nullptr; if (id == CSSValueHand) {
diff --git a/third_party/WebKit/Source/core/css/properties/CSSPropertyAPIOffsetPosition.cpp b/third_party/WebKit/Source/core/css/properties/CSSPropertyAPIOffsetPosition.cpp index 1fc270d4..76f80cc9 100644 --- a/third_party/WebKit/Source/core/css/properties/CSSPropertyAPIOffsetPosition.cpp +++ b/third_party/WebKit/Source/core/css/properties/CSSPropertyAPIOffsetPosition.cpp
@@ -21,8 +21,8 @@ range, context->mode(), CSSPropertyParserHelpers::UnitlessQuirk::Forbid); // Count when we receive a valid position other than 'auto'. - if (context->isUseCounterRecordingEnabled() && value && value->isValuePair()) - context->useCounter()->count(UseCounter::CSSOffsetInEffect); + if (value && value->isValuePair()) + context->count(UseCounter::CSSOffsetInEffect); return value; }
diff --git a/third_party/WebKit/Source/core/css/properties/CSSPropertyAPIZoom.cpp b/third_party/WebKit/Source/core/css/properties/CSSPropertyAPIZoom.cpp index dc8a261..cb18fb11 100644 --- a/third_party/WebKit/Source/core/css/properties/CSSPropertyAPIZoom.cpp +++ b/third_party/WebKit/Source/core/css/properties/CSSPropertyAPIZoom.cpp
@@ -26,17 +26,17 @@ CSSPropertyParserHelpers::consumeNumber(range, ValueRangeNonNegative); } } - if (zoom && context->isUseCounterRecordingEnabled()) { + if (zoom) { if (!(token.id() == CSSValueNormal || (token.type() == NumberToken && toCSSPrimitiveValue(zoom)->getDoubleValue() == 1) || (token.type() == PercentageToken && toCSSPrimitiveValue(zoom)->getDoubleValue() == 100))) - context->useCounter()->count(UseCounter::CSSZoomNotEqualToOne); + context->count(UseCounter::CSSZoomNotEqualToOne); if (token.id() == CSSValueReset) - context->useCounter()->count(UseCounter::CSSZoomReset); + context->count(UseCounter::CSSZoomReset); if (token.id() == CSSValueDocument) - context->useCounter()->count(UseCounter::CSSZoomDocument); + context->count(UseCounter::CSSZoomDocument); } return zoom; }
diff --git a/third_party/WebKit/Source/core/css/properties/CSSPropertyLengthUtils.cpp b/third_party/WebKit/Source/core/css/properties/CSSPropertyLengthUtils.cpp index 1222ac6..f5189ae 100644 --- a/third_party/WebKit/Source/core/css/properties/CSSPropertyLengthUtils.cpp +++ b/third_party/WebKit/Source/core/css/properties/CSSPropertyLengthUtils.cpp
@@ -17,24 +17,21 @@ id == CSSValueWebkitFillAvailable || id == CSSValueWebkitFitContent || id == CSSValueMinContent || id == CSSValueMaxContent || id == CSSValueFitContent) { - if (context->isUseCounterRecordingEnabled()) { - UseCounter* useCounter = context->useCounter(); - switch (id) { - case CSSValueWebkitMinContent: - useCounter->count(UseCounter::CSSValuePrefixedMinContent); - break; - case CSSValueWebkitMaxContent: - useCounter->count(UseCounter::CSSValuePrefixedMaxContent); - break; - case CSSValueWebkitFillAvailable: - useCounter->count(UseCounter::CSSValuePrefixedFillAvailable); - break; - case CSSValueWebkitFitContent: - useCounter->count(UseCounter::CSSValuePrefixedFitContent); - break; - default: - break; - } + switch (id) { + case CSSValueWebkitMinContent: + context->count(UseCounter::CSSValuePrefixedMinContent); + break; + case CSSValueWebkitMaxContent: + context->count(UseCounter::CSSValuePrefixedMaxContent); + break; + case CSSValueWebkitFillAvailable: + context->count(UseCounter::CSSValuePrefixedFillAvailable); + break; + case CSSValueWebkitFitContent: + context->count(UseCounter::CSSValuePrefixedFitContent); + break; + default: + break; } return true; }
diff --git a/third_party/WebKit/Source/core/dom/PendingScript.cpp b/third_party/WebKit/Source/core/dom/PendingScript.cpp index f3eb537..4507e23 100644 --- a/third_party/WebKit/Source/core/dom/PendingScript.cpp +++ b/third_party/WebKit/Source/core/dom/PendingScript.cpp
@@ -218,9 +218,7 @@ return false; } -void PendingScript::onMemoryStateChange(MemoryState state) { - if (state != MemoryState::SUSPENDED) - return; +void PendingScript::onPurgeMemory() { if (!m_streamer) return; m_streamer->cancel();
diff --git a/third_party/WebKit/Source/core/dom/PendingScript.h b/third_party/WebKit/Source/core/dom/PendingScript.h index 51378fb..6c3dfaf 100644 --- a/third_party/WebKit/Source/core/dom/PendingScript.h +++ b/third_party/WebKit/Source/core/dom/PendingScript.h
@@ -116,7 +116,7 @@ void notifyAppendData(ScriptResource*) override; // MemoryCoordinatorClient - void onMemoryStateChange(MemoryState) override; + void onPurgeMemory() override; bool m_watchingForLoad; Member<Element> m_element;
diff --git a/third_party/WebKit/Source/core/frame/UseCounter.cpp b/third_party/WebKit/Source/core/frame/UseCounter.cpp index b16041f0..f424c14 100644 --- a/third_party/WebKit/Source/core/frame/UseCounter.cpp +++ b/third_party/WebKit/Source/core/frame/UseCounter.cpp
@@ -1249,26 +1249,6 @@ recordMeasurement(feature); } -UseCounter* UseCounter::getFrom(const Document* document) { - if (document && document->frameHost()) - return &document->frameHost()->useCounter(); - return 0; -} - -UseCounter* UseCounter::getFrom(const CSSStyleSheet* sheet) { - if (sheet) - return getFrom(sheet->contents()); - return 0; -} - -UseCounter* UseCounter::getFrom(const StyleSheetContents* sheetContents) { - // FIXME: We may want to handle stylesheets that have multiple owners - // https://crbug.com/242125 - if (sheetContents && sheetContents->hasSingleOwnerNode()) - return getFrom(sheetContents->singleOwnerDocument()); - return 0; -} - EnumerationHistogram& UseCounter::featuresHistogram() const { // Every SVGImage has it's own Page instance, and multiple web pages can // share the usage of a single SVGImage. Ideally perhaps we'd delegate
diff --git a/third_party/WebKit/Source/core/frame/UseCounter.h b/third_party/WebKit/Source/core/frame/UseCounter.h index 5392204..b78eab5f 100644 --- a/third_party/WebKit/Source/core/frame/UseCounter.h +++ b/third_party/WebKit/Source/core/frame/UseCounter.h
@@ -1487,10 +1487,6 @@ // Invoked when a new document is loaded into the main frame of the page. void didCommitLoad(KURL); - static UseCounter* getFrom(const Document*); - static UseCounter* getFrom(const CSSStyleSheet*); - static UseCounter* getFrom(const StyleSheetContents*); - static int mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyID); // When muted, all calls to "count" functions are ignoed. May be nested.
diff --git a/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.cpp b/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.cpp index 0dbfa0fc..58984f54 100644 --- a/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.cpp
@@ -1092,15 +1092,6 @@ return lineCrossAxisExtent - childCrossExtent; } -LayoutUnit LayoutFlexibleBox::availableAlignmentSpaceForChildBeforeStretching( - LayoutUnit lineCrossAxisExtent, - const LayoutBox& child) { - DCHECK(!child.isOutOfFlowPositioned()); - LayoutUnit childCrossExtent = crossAxisMarginExtentForChild(child) + - crossAxisIntrinsicExtentForChild(child); - return lineCrossAxisExtent - childCrossExtent; -} - bool LayoutFlexibleBox::updateAutoMarginsInCrossAxis( LayoutBox& child, LayoutUnit availableAlignmentSpace) { @@ -2089,16 +2080,12 @@ LayoutBox& child, LayoutUnit lineCrossAxisExtent) { if (!hasOrthogonalFlow(child) && child.style()->logicalHeight().isAuto()) { - LayoutUnit heightBeforeStretching = childIntrinsicLogicalHeight(child); LayoutUnit stretchedLogicalHeight = std::max(child.borderAndPaddingLogicalHeight(), - heightBeforeStretching + - availableAlignmentSpaceForChildBeforeStretching( - lineCrossAxisExtent, child)); + lineCrossAxisExtent - crossAxisMarginExtentForChild(child)); DCHECK(!child.needsLayout()); LayoutUnit desiredLogicalHeight = child.constrainLogicalHeightByMinMax( - stretchedLogicalHeight, - heightBeforeStretching - child.borderAndPaddingLogicalHeight()); + stretchedLogicalHeight, child.intrinsicContentLogicalHeight()); // FIXME: Can avoid laying out here in some cases. See // https://webkit.org/b/87905.
diff --git a/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.h b/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.h index ddb6f03..38f2c5f0 100644 --- a/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.h +++ b/third_party/WebKit/Source/core/layout/LayoutFlexibleBox.h
@@ -179,9 +179,6 @@ LayoutUnit availableAlignmentSpaceForChild(LayoutUnit lineCrossAxisExtent, const LayoutBox& child); - LayoutUnit availableAlignmentSpaceForChildBeforeStretching( - LayoutUnit lineCrossAxisExtent, - const LayoutBox& child); LayoutUnit marginBoxAscentForChild(const LayoutBox& child); LayoutUnit computeChildMarginValue(Length margin);
diff --git a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp index bf203b45..54a33c0 100644 --- a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp +++ b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
@@ -1515,10 +1515,8 @@ bool isContainer = m_owningLayer.layoutObject()->style()->canContainFixedPositionObjects() && !m_owningLayer.isRootLayer(); - // FIXME: we should make certain that childForSuperLayers will never be the - // m_squashingContainmentLayer here scrollingCoordinator->setLayerIsContainerForFixedPositionLayers( - childForSuperlayers(), isContainer); + m_graphicsLayer.get(), isContainer); } void CompositedLayerMapping::updateInternalHierarchy() {
diff --git a/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp b/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp index 0152a5f8..b2eb801 100644 --- a/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp +++ b/third_party/WebKit/Source/core/paint/PrePaintTreeWalk.cpp
@@ -73,6 +73,9 @@ static void updateAuxiliaryObjectProperties(const LayoutObject& object, PrePaintTreeWalkContext& context) { + if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) + return; + if (!object.hasLayer()) return;
diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.h b/third_party/WebKit/Source/core/style/ComputedStyle.h index cdd71835..33dc893 100644 --- a/third_party/WebKit/Source/core/style/ComputedStyle.h +++ b/third_party/WebKit/Source/core/style/ComputedStyle.h
@@ -766,7 +766,6 @@ return static_cast<EBreak>(m_nonInheritedData.m_breakAfter); } void setBreakAfter(EBreak b) { - DCHECK_LE(b, BreakValueLastAllowedForBreakAfterAndBefore); m_nonInheritedData.m_breakAfter = b; } @@ -777,7 +776,6 @@ return static_cast<EBreak>(m_nonInheritedData.m_breakBefore); } void setBreakBefore(EBreak b) { - DCHECK_LE(b, BreakValueLastAllowedForBreakAfterAndBefore); m_nonInheritedData.m_breakBefore = b; }
diff --git a/third_party/WebKit/Source/core/style/ComputedStyleConstants.h b/third_party/WebKit/Source/core/style/ComputedStyleConstants.h index 18e5f8c..88b0c7c 100644 --- a/third_party/WebKit/Source/core/style/ComputedStyleConstants.h +++ b/third_party/WebKit/Source/core/style/ComputedStyleConstants.h
@@ -330,10 +330,7 @@ BreakPage, BreakRecto, BreakRight, - BreakVerso, - BreakValueLastAllowedForBreakAfterAndBefore = BreakVerso, - BreakAlways // Only needed by {page,-webkit-column}-break-{after,before} - // shorthands. + BreakVerso }; enum class ECursor : unsigned {
diff --git a/third_party/WebKit/Source/core/style/StyleVisualData.cpp b/third_party/WebKit/Source/core/style/StyleVisualData.cpp index 55a9a72a..7e29491 100644 --- a/third_party/WebKit/Source/core/style/StyleVisualData.cpp +++ b/third_party/WebKit/Source/core/style/StyleVisualData.cpp
@@ -37,8 +37,6 @@ clip(o.clip), hasAutoClip(o.hasAutoClip), textDecoration(o.textDecoration), - m_zoom(ComputedStyle::initialZoom()) { - DCHECK(m_zoom == o.m_zoom); // crbug.com/689330 -} + m_zoom(o.m_zoom) {} } // namespace blink
diff --git a/third_party/WebKit/Source/devtools/front_end/profiler/ProfilesPanel.js b/third_party/WebKit/Source/devtools/front_end/profiler/ProfilesPanel.js index b74e789..8a6deaf 100644 --- a/third_party/WebKit/Source/devtools/front_end/profiler/ProfilesPanel.js +++ b/third_party/WebKit/Source/devtools/front_end/profiler/ProfilesPanel.js
@@ -48,6 +48,7 @@ this._sidebarTree = new UI.TreeOutlineInShadow(); this._sidebarTree.registerRequiredCSS('profiler/profilesSidebarTree.css'); + this._sidebarTree.element.classList.add('profiles-sidebar-tree-box'); this.panelSidebarElement().appendChild(this._sidebarTree.element); this._sidebarTree.appendChild(this.profilesItemTreeElement); @@ -60,7 +61,7 @@ this._toolbarElement = createElementWithClass('div', 'profiles-toolbar'); mainContainer.element.insertBefore(this._toolbarElement, mainContainer.element.firstChild); - this.panelSidebarElement().classList.add('profiles-sidebar-tree-box'); + this.panelSidebarElement().classList.add('profiles-tree-sidebar'); var toolbarContainerLeft = createElementWithClass('div', 'profiles-toolbar'); this.panelSidebarElement().insertBefore(toolbarContainerLeft, this.panelSidebarElement().firstChild); var toolbar = new UI.Toolbar('', toolbarContainerLeft);
diff --git a/third_party/WebKit/Source/devtools/front_end/profiler/profilesPanel.css b/third_party/WebKit/Source/devtools/front_end/profiler/profilesPanel.css index 3d86ce7..7b257ec7 100644 --- a/third_party/WebKit/Source/devtools/front_end/profiler/profilesPanel.css +++ b/third_party/WebKit/Source/devtools/front_end/profiler/profilesPanel.css
@@ -67,10 +67,16 @@ .profiles-toolbar { background-color: #f3f3f3; border-bottom: 1px solid #ccc; + flex-shrink: 0; +} + +.profiles-tree-sidebar { + flex: auto; + overflow: hidden; } .profiles-sidebar-tree-box { - flex: auto; + overflow-y: auto; } .profile-view {
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBKey.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBKey.cpp index 356ad3b..73931db 100644 --- a/third_party/WebKit/Source/modules/indexeddb/IDBKey.cpp +++ b/third_party/WebKit/Source/modules/indexeddb/IDBKey.cpp
@@ -83,7 +83,7 @@ case NumberType: return compareNumbers(m_number, other->m_number); case InvalidType: - case MinType: + case TypeEnumMax: ASSERT_NOT_REACHED(); return 0; }
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBKey.h b/third_party/WebKit/Source/modules/indexeddb/IDBKey.h index 4b9ff35..be542af81 100644 --- a/third_party/WebKit/Source/modules/indexeddb/IDBKey.h +++ b/third_party/WebKit/Source/modules/indexeddb/IDBKey.h
@@ -63,14 +63,16 @@ DECLARE_TRACE(); // In order of the least to the highest precedent in terms of sort order. + // These values are written to logs. New enum values can be added, but + // existing enums must never be renumbered or deleted and reused. enum Type { InvalidType = 0, - ArrayType, - BinaryType, - StringType, - DateType, - NumberType, - MinType + ArrayType = 1, + BinaryType = 2, + StringType = 3, + DateType = 4, + NumberType = 5, + TypeEnumMax, }; Type getType() const { return m_type; }
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp index eb6d1fd..7971e80 100644 --- a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp +++ b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
@@ -25,6 +25,10 @@ #include "modules/indexeddb/IDBObjectStore.h" +#include <memory> + +#include <v8.h> + #include "bindings/core/v8/ExceptionState.h" #include "bindings/core/v8/ScriptState.h" #include "bindings/core/v8/SerializedScriptValueFactory.h" @@ -38,14 +42,13 @@ #include "modules/indexeddb/IDBDatabase.h" #include "modules/indexeddb/IDBKeyPath.h" #include "modules/indexeddb/IDBTracing.h" +#include "platform/Histogram.h" #include "platform/SharedBuffer.h" #include "public/platform/WebBlobInfo.h" #include "public/platform/WebData.h" #include "public/platform/WebVector.h" #include "public/platform/modules/indexeddb/WebIDBKey.h" #include "public/platform/modules/indexeddb/WebIDBKeyRange.h" -#include <memory> -#include <v8.h> using blink::WebBlobInfo; using blink::WebIDBCallbacks; @@ -321,15 +324,25 @@ if (!indexKey) return; + DEFINE_THREAD_SAFE_STATIC_LOCAL( + EnumerationHistogram, keyTypeHistogram, + new EnumerationHistogram( + "WebCore.IndexedDB.ObjectStore.IndexEntry.KeyType", + static_cast<int>(IDBKey::TypeEnumMax))); + if (!indexMetadata.multiEntry || indexKey->getType() != IDBKey::ArrayType) { if (!indexKey->isValid()) return; indexKeys->push_back(indexKey); + keyTypeHistogram.count(static_cast<int>(indexKey->getType())); } else { DCHECK(indexMetadata.multiEntry); DCHECK_EQ(indexKey->getType(), IDBKey::ArrayType); - indexKeys->appendVector(indexKey->toMultiEntryArray()); + IDBKey::KeyArray array = indexKey->toMultiEntryArray(); + for (const IDBKey* key : array) + keyTypeHistogram.count(static_cast<int>(key->getType())); + indexKeys->appendVector(array); } } @@ -447,9 +460,10 @@ return nullptr; } if (usesInLineKeys) { - if (clone.isEmpty()) + if (clone.isEmpty()) { clone = deserializeScriptValue(scriptState, serializedValue.get(), &blobInfo); + } IDBKey* keyPathKey = ScriptValue::to<IDBKey*>(scriptState->isolate(), clone, exceptionState, keyPath); if (exceptionState.hadException()) @@ -490,12 +504,21 @@ return nullptr; } + if (key && usesInLineKeys) { + DEFINE_THREAD_SAFE_STATIC_LOCAL( + EnumerationHistogram, keyTypeHistogram, + new EnumerationHistogram("WebCore.IndexedDB.ObjectStore.Record.KeyType", + static_cast<int>(IDBKey::TypeEnumMax))); + keyTypeHistogram.count(static_cast<int>(key->getType())); + } + Vector<int64_t> indexIds; HeapVector<IndexKeys> indexKeys; for (const auto& it : metadata().indexes) { - if (clone.isEmpty()) + if (clone.isEmpty()) { clone = deserializeScriptValue(scriptState, serializedValue.get(), &blobInfo); + } IndexKeys keys; generateIndexKeysForValue(scriptState->isolate(), *it.value, clone, &keys); indexIds.push_back(it.key);
diff --git a/third_party/WebKit/Source/platform/BUILD.gn b/third_party/WebKit/Source/platform/BUILD.gn index 6c36e04..d053681f 100644 --- a/third_party/WebKit/Source/platform/BUILD.gn +++ b/third_party/WebKit/Source/platform/BUILD.gn
@@ -405,14 +405,10 @@ "audio/AudioDestination.cpp", "audio/AudioDestination.h", "audio/AudioDestinationConsumer.h", - "audio/AudioFIFO.cpp", - "audio/AudioFIFO.h", "audio/AudioFileReader.h", "audio/AudioIOCallback.h", "audio/AudioProcessor.cpp", "audio/AudioProcessor.h", - "audio/AudioPullFIFO.cpp", - "audio/AudioPullFIFO.h", "audio/AudioResampler.cpp", "audio/AudioResampler.h", "audio/AudioResamplerKernel.cpp", @@ -459,6 +455,8 @@ "audio/MultiChannelResampler.h", "audio/Panner.cpp", "audio/Panner.h", + "audio/PushPullFIFO.cpp", + "audio/PushPullFIFO.h", "audio/Reverb.cpp", "audio/Reverb.h", "audio/ReverbAccumulationBuffer.cpp", @@ -1699,6 +1697,7 @@ "animation/CompositorAnimationTimelineTest.cpp", "animation/CompositorFloatAnimationCurveTest.cpp", "animation/TimingFunctionTest.cpp", + "audio/PushPullFIFOTest.cpp", "blob/BlobDataTest.cpp", "exported/FilePathConversionTest.cpp", "exported/WebStringTest.cpp",
diff --git a/third_party/WebKit/Source/platform/MemoryCoordinator.cpp b/third_party/WebKit/Source/platform/MemoryCoordinator.cpp index 8dd8a65..c011a96 100644 --- a/third_party/WebKit/Source/platform/MemoryCoordinator.cpp +++ b/third_party/WebKit/Source/platform/MemoryCoordinator.cpp
@@ -65,19 +65,15 @@ void MemoryCoordinator::onMemoryStateChange(MemoryState state) { for (auto& client : m_clients) client->onMemoryStateChange(state); - // Font cache invalidation always causes full layout. This increases - // tab switching cost significantly (e.g. en.wikipedia.org/wiki/Wikipedia). - // So we should not invalidate the font cache in purge+throttle. We should - // invalidate the font cache only when receiving a critical memory pressure. - if (state == MemoryState::SUSPENDED) - ImageDecodingStore::instance().clear(); - WTF::Partitions::decommitFreeableMemory(); } void MemoryCoordinator::onPurgeMemory() { - // TODO(tasak|bashi): Move code from onMemoryStateChange(). Currently - // onMemoryStateChange() is called when the purge+throttled experiment is - // enabled. + // Don't call clearMemory() because font cache invalidation always causes full + // layout. This increases tab switching cost significantly (e.g. + // en.wikipedia.org/wiki/Wikipedia). So we should not invalidate the font + // cache in purge+throttle. + ImageDecodingStore::instance().clear(); + WTF::Partitions::decommitFreeableMemory(); } void MemoryCoordinator::clearMemory() {
diff --git a/third_party/WebKit/Source/platform/MemoryCoordinator.h b/third_party/WebKit/Source/platform/MemoryCoordinator.h index 939c3cec..8e78cbd6 100644 --- a/third_party/WebKit/Source/platform/MemoryCoordinator.h +++ b/third_party/WebKit/Source/platform/MemoryCoordinator.h
@@ -22,6 +22,8 @@ virtual void onMemoryPressure(WebMemoryPressureLevel) {} virtual void onMemoryStateChange(MemoryState) {} + + virtual void onPurgeMemory() {} }; // MemoryCoordinator listens to some events which could be opportunities
diff --git a/third_party/WebKit/Source/platform/audio/AudioDestination.cpp b/third_party/WebKit/Source/platform/audio/AudioDestination.cpp index dcf0ea58..70ca828e 100644 --- a/third_party/WebKit/Source/platform/audio/AudioDestination.cpp +++ b/third_party/WebKit/Source/platform/audio/AudioDestination.cpp
@@ -28,14 +28,14 @@ #include "platform/audio/AudioDestination.h" +#include <memory> #include "platform/Histogram.h" -#include "platform/audio/AudioPullFIFO.h" #include "platform/audio/AudioUtilities.h" +#include "platform/audio/PushPullFIFO.h" #include "platform/weborigin/SecurityOrigin.h" #include "public/platform/Platform.h" #include "public/platform/WebSecurityOrigin.h" #include "wtf/PtrUtil.h" -#include <memory> namespace blink { @@ -67,6 +67,8 @@ m_outputBus(AudioBus::create(numberOfOutputChannels, AudioUtilities::kRenderQuantumFrames, false)), + m_renderBus(AudioBus::create(numberOfOutputChannels, + AudioUtilities::kRenderQuantumFrames)), m_framesElapsed(0) { // Calculate the optimum buffer size first. if (calculateBufferSize()) { @@ -80,9 +82,8 @@ DCHECK(m_webAudioDevice); // Create a FIFO. - m_fifo = WTF::wrapUnique( - new AudioPullFIFO(*this, numberOfOutputChannels, kFIFOSize, - AudioUtilities::kRenderQuantumFrames)); + m_fifo = + WTF::wrapUnique(new PushPullFIFO(numberOfOutputChannels, kFIFOSize)); } else { NOTREACHED(); } @@ -97,13 +98,8 @@ double delay, double delayTimestamp, size_t priorFramesSkipped) { - DCHECK_EQ(destinationData.size(), m_numberOfOutputChannels); - if (destinationData.size() != m_numberOfOutputChannels) - return; - - DCHECK_EQ(numberOfFrames, m_callbackBufferSize); - if (numberOfFrames != m_callbackBufferSize) - return; + CHECK_EQ(destinationData.size(), m_numberOfOutputChannels); + CHECK_EQ(numberOfFrames, m_callbackBufferSize); m_framesElapsed -= std::min(m_framesElapsed, priorFramesSkipped); double outputPosition = @@ -116,32 +112,41 @@ // FIFO. for (unsigned i = 0; i < m_numberOfOutputChannels; ++i) m_outputBus->setChannelMemory(i, destinationData[i], numberOfFrames); - m_fifo->consume(m_outputBus.get(), numberOfFrames); - m_framesElapsed += numberOfFrames; -} + // Number of frames to render via WebAudio graph. |framesToRender > 0| means + // the frames in FIFO is not enough to fulfill the requested frames from the + // audio device. + size_t framesToRender = numberOfFrames > m_fifo->framesAvailable() + ? numberOfFrames - m_fifo->framesAvailable() + : 0; -void AudioDestination::provideInput(AudioBus* outputBus, - size_t framesToProcess) { - AudioIOPosition outputPosition = m_outputPosition; + for (size_t pushedFrames = 0; pushedFrames < framesToRender; + pushedFrames += AudioUtilities::kRenderQuantumFrames) { + // If platform buffer is more than two times longer than |framesToProcess| + // we do not want output position to get stuck so we promote it + // using the elapsed time from the moment it was initially obtained. + if (m_callbackBufferSize > AudioUtilities::kRenderQuantumFrames * 2) { + double delta = + (base::TimeTicks::Now() - m_outputPositionReceivedTimestamp) + .InSecondsF(); + m_outputPosition.position += delta; + m_outputPosition.timestamp += delta; + } - // If platform buffer is more than two times longer than |framesToProcess| - // we do not want output position to get stuck so we promote it - // using the elapsed time from the moment it was initially obtained. - if (m_callbackBufferSize > framesToProcess * 2) { - double delta = (base::TimeTicks::Now() - m_outputPositionReceivedTimestamp) - .InSecondsF(); - outputPosition.position += delta; - outputPosition.timestamp += delta; + // Some implementations give only rough estimation of |delay| so + // we might have negative estimation |outputPosition| value. + if (m_outputPosition.position < 0.0) + m_outputPosition.position = 0.0; + + // Process WebAudio graph and push the rendered output to FIFO. + m_callback.render(nullptr, m_renderBus.get(), + AudioUtilities::kRenderQuantumFrames, m_outputPosition); + m_fifo->push(m_renderBus.get()); } - // Some implementations give only rough estimation of |delay| so - // we might have negative estimation |outputPosition| value. - if (outputPosition.position < 0.0) - outputPosition.position = 0.0; + m_fifo->pull(m_outputBus.get(), numberOfFrames); - // To fill the FIFO, start the render call chain of the destination node. - m_callback.render(nullptr, outputBus, framesToProcess, outputPosition); + m_framesElapsed += numberOfFrames; } void AudioDestination::start() {
diff --git a/third_party/WebKit/Source/platform/audio/AudioDestination.h b/third_party/WebKit/Source/platform/audio/AudioDestination.h index d0e35b8..f5c699a1 100644 --- a/third_party/WebKit/Source/platform/audio/AudioDestination.h +++ b/third_party/WebKit/Source/platform/audio/AudioDestination.h
@@ -31,7 +31,6 @@ #include "platform/audio/AudioBus.h" #include "platform/audio/AudioIOCallback.h" -#include "platform/audio/AudioSourceProvider.h" #include "public/platform/WebAudioDevice.h" #include "public/platform/WebVector.h" #include "wtf/Allocator.h" @@ -41,15 +40,14 @@ namespace blink { -class AudioPullFIFO; +class PushPullFIFO; class SecurityOrigin; // The AudioDestination class is an audio sink interface between the media // renderer and the Blink's WebAudio module. It has a FIFO to adapt the // different processing block sizes of WebAudio renderer and actual hardware // audio callback. -class PLATFORM_EXPORT AudioDestination : public WebAudioDevice::RenderCallback, - public AudioSourceProvider { +class PLATFORM_EXPORT AudioDestination : public WebAudioDevice::RenderCallback { USING_FAST_MALLOC(AudioDestination); WTF_MAKE_NONCOPYABLE(AudioDestination); @@ -74,9 +72,6 @@ double delayTimestamp, size_t priorFramesSkipped) override; - // AudioSourceProvider (FIFO) - void provideInput(AudioBus* outputBus, size_t framesToProcess) override; - virtual void start(); virtual void stop(); @@ -98,8 +93,15 @@ // The render callback function of WebAudio engine. (i.e. DestinationNode) AudioIOCallback& m_callback; + // To pass the data from FIFO to the audio device callback. RefPtr<AudioBus> m_outputBus; - std::unique_ptr<AudioPullFIFO> m_fifo; + + // To push the rendered result from WebAudio graph into the FIFO. + RefPtr<AudioBus> m_renderBus; + + // Resolves the buffer size mismatch between the WebAudio engine and + // the callback function from the actual audio device. + std::unique_ptr<PushPullFIFO> m_fifo; size_t m_framesElapsed; AudioIOPosition m_outputPosition;
diff --git a/third_party/WebKit/Source/platform/audio/AudioFIFO.cpp b/third_party/WebKit/Source/platform/audio/AudioFIFO.cpp deleted file mode 100644 index c35ce14..0000000 --- a/third_party/WebKit/Source/platform/audio/AudioFIFO.cpp +++ /dev/null
@@ -1,146 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "platform/audio/AudioFIFO.h" - -namespace blink { - -AudioFIFO::AudioFIFO(unsigned numberOfChannels, size_t fifoLength) - : m_fifoAudioBus(AudioBus::create(numberOfChannels, fifoLength)), - m_fifoLength(fifoLength), - m_framesInFifo(0), - m_readIndex(0), - m_writeIndex(0) {} - -void AudioFIFO::consume(AudioBus* destination, size_t framesToConsume) { - bool isGood = destination && (framesToConsume <= m_fifoLength) && - (framesToConsume <= m_framesInFifo) && - (destination->length() >= framesToConsume); - ASSERT(isGood); - if (!isGood) - return; - - // Copy the requested number of samples to the destination. - - size_t part1Length; - size_t part2Length; - findWrapLengths(m_readIndex, framesToConsume, part1Length, part2Length); - - size_t numberOfChannels = m_fifoAudioBus->numberOfChannels(); - - for (size_t channelIndex = 0; channelIndex < numberOfChannels; - ++channelIndex) { - float* destinationData = destination->channel(channelIndex)->mutableData(); - const float* sourceData = m_fifoAudioBus->channel(channelIndex)->data(); - - bool isCopyGood = ((m_readIndex < m_fifoLength) && - (m_readIndex + part1Length) <= m_fifoLength && - (part1Length <= destination->length()) && - (part1Length + part2Length) <= destination->length()); - ASSERT(isCopyGood); - if (!isCopyGood) - return; - - memcpy(destinationData, sourceData + m_readIndex, - part1Length * sizeof(*sourceData)); - // Handle wrap around of the FIFO, if needed. - if (part2Length) - memcpy(destinationData + part1Length, sourceData, - part2Length * sizeof(*sourceData)); - } - m_readIndex = updateIndex(m_readIndex, framesToConsume); - ASSERT(m_framesInFifo >= framesToConsume); - m_framesInFifo -= framesToConsume; -} - -void AudioFIFO::push(const AudioBus* sourceBus) { - // Copy the sourceBus into the FIFO buffer. - - bool isGood = - sourceBus && (m_framesInFifo + sourceBus->length() <= m_fifoLength); - if (!isGood) - return; - - size_t sourceLength = sourceBus->length(); - size_t part1Length; - size_t part2Length; - findWrapLengths(m_writeIndex, sourceLength, part1Length, part2Length); - - size_t numberOfChannels = m_fifoAudioBus->numberOfChannels(); - - for (size_t channelIndex = 0; channelIndex < numberOfChannels; - ++channelIndex) { - float* destination = m_fifoAudioBus->channel(channelIndex)->mutableData(); - const float* source = sourceBus->channel(channelIndex)->data(); - - bool isCopyGood = ((m_writeIndex < m_fifoLength) && - (m_writeIndex + part1Length) <= m_fifoLength && - part2Length < m_fifoLength && - part1Length + part2Length <= sourceLength); - ASSERT(isCopyGood); - if (!isCopyGood) - return; - - memcpy(destination + m_writeIndex, source, - part1Length * sizeof(*destination)); - - // Handle wrap around of the FIFO, if needed. - if (part2Length) - memcpy(destination, source + part1Length, - part2Length * sizeof(*destination)); - } - - m_framesInFifo += sourceLength; - ASSERT(m_framesInFifo <= m_fifoLength); - m_writeIndex = updateIndex(m_writeIndex, sourceLength); -} - -void AudioFIFO::findWrapLengths(size_t index, - size_t size, - size_t& part1Length, - size_t& part2Length) { - SECURITY_DCHECK(index < m_fifoLength && size <= m_fifoLength); - if (index < m_fifoLength && size <= m_fifoLength) { - if (index + size > m_fifoLength) { - // Need to wrap. Figure out the length of each piece. - part1Length = m_fifoLength - index; - part2Length = size - part1Length; - } else { - // No wrap needed. - part1Length = size; - part2Length = 0; - } - } else { - // Invalid values for index or size. Set the part lengths to zero so nothing - // is copied. - part1Length = 0; - part2Length = 0; - } -} - -} // namespace blink
diff --git a/third_party/WebKit/Source/platform/audio/AudioFIFO.h b/third_party/WebKit/Source/platform/audio/AudioFIFO.h deleted file mode 100644 index ef66f92..0000000 --- a/third_party/WebKit/Source/platform/audio/AudioFIFO.h +++ /dev/null
@@ -1,84 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef AudioFIFO_h -#define AudioFIFO_h - -#include "platform/audio/AudioBus.h" -#include "wtf/Allocator.h" - -namespace blink { - -class AudioFIFO { - USING_FAST_MALLOC(AudioFIFO); - WTF_MAKE_NONCOPYABLE(AudioFIFO); - - public: - // Create a FIFO large enough to hold |fifoLength| frames of data of - // |numberOfChannels| channels. - AudioFIFO(unsigned numberOfChannels, size_t fifoLength); - - // Push the data from the bus into the FIFO. - void push(const AudioBus*); - - // Consume |framesToConsume| frames of data from the FIFO and put them in - // |destination|. The corresponding frames are removed from the FIFO. - void consume(AudioBus* destination, size_t framesToConsume); - - // Number of frames of data that are currently in the FIFO. - size_t framesInFifo() const { return m_framesInFifo; } - - private: - // Update the FIFO index by the step, with appropriate wrapping around the - // endpoint. - int updateIndex(int index, int step) { return (index + step) % m_fifoLength; } - - void findWrapLengths(size_t index, - size_t providerSize, - size_t& part1Length, - size_t& part2Length); - - // The FIFO itself. In reality, the FIFO is a circular buffer. - RefPtr<AudioBus> m_fifoAudioBus; - - // The total available space in the FIFO. - size_t m_fifoLength; - - // The number of actual elements in the FIFO - size_t m_framesInFifo; - - // Where to start reading from the FIFO. - size_t m_readIndex; - - // Where to start writing to the FIFO. - size_t m_writeIndex; -}; - -} // namespace blink - -#endif // AudioFIFO.h
diff --git a/third_party/WebKit/Source/platform/audio/AudioPullFIFO.cpp b/third_party/WebKit/Source/platform/audio/AudioPullFIFO.cpp deleted file mode 100644 index ca14cfa..0000000 --- a/third_party/WebKit/Source/platform/audio/AudioPullFIFO.cpp +++ /dev/null
@@ -1,69 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "platform/audio/AudioPullFIFO.h" - -namespace blink { - -AudioPullFIFO::AudioPullFIFO(AudioSourceProvider& audioProvider, - unsigned numberOfChannels, - size_t fifoLength, - size_t providerSize) - : m_provider(audioProvider), - m_fifo(numberOfChannels, fifoLength), - m_providerSize(providerSize), - m_tempBus(AudioBus::create(numberOfChannels, providerSize)) {} - -void AudioPullFIFO::consume(AudioBus* destination, size_t framesToConsume) { - if (!destination) - return; - - if (framesToConsume > m_fifo.framesInFifo()) { - // We don't have enough data in the FIFO to fulfill the request. Ask for - // more data. - fillBuffer(framesToConsume - m_fifo.framesInFifo()); - } - - m_fifo.consume(destination, framesToConsume); -} - -void AudioPullFIFO::fillBuffer(size_t numberOfFrames) { - // Keep asking the provider to give us data until we have received at least - // |numberOfFrames| of data. Stuff the data into the FIFO. - size_t framesProvided = 0; - - while (framesProvided < numberOfFrames) { - m_provider.provideInput(m_tempBus.get(), m_providerSize); - - m_fifo.push(m_tempBus.get()); - - framesProvided += m_providerSize; - } -} - -} // namespace blink
diff --git a/third_party/WebKit/Source/platform/audio/AudioPullFIFO.h b/third_party/WebKit/Source/platform/audio/AudioPullFIFO.h deleted file mode 100644 index 7f375b2e..0000000 --- a/third_party/WebKit/Source/platform/audio/AudioPullFIFO.h +++ /dev/null
@@ -1,84 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef AudioPullFIFO_h -#define AudioPullFIFO_h - -#include "platform/audio/AudioBus.h" -#include "platform/audio/AudioFIFO.h" -#include "platform/audio/AudioSourceProvider.h" -#include "wtf/Allocator.h" - -namespace blink { - -// A FIFO (First In First Out) buffer to handle mismatches in buffer sizes -// between a provider and receiver. The receiver will "pull" data from this -// FIFO. If data is already available in the FIFO, it is provided to the -// receiver. If insufficient data is available to satisfy the request, the FIFO -// will ask the provider for more data when necessary to fulfill a request. -// Contrast this with a "push" FIFO, where the sender pushes data to the FIFO -// which will itself push the data to the receiver when the FIFO is full. -class PLATFORM_EXPORT AudioPullFIFO { - USING_FAST_MALLOC(AudioPullFIFO); - WTF_MAKE_NONCOPYABLE(AudioPullFIFO); - - public: - // Create a FIFO that gets data from |provider|. The FIFO will be large - // enough to hold |fifoLength| frames of data of |numberOfChannels| channels. - // The AudioSourceProvider will be asked to produce |providerSize| frames - // when the FIFO needs more data. - AudioPullFIFO(AudioSourceProvider& audioProvider, - unsigned numberOfChannels, - size_t fifoLength, - size_t providerSize); - - // Read |framesToConsume| frames from the FIFO into the destination. If the - // FIFO does not have enough data, we ask the |provider| to get more data to - // fulfill the request. - void consume(AudioBus* destination, size_t framesToConsume); - - private: - // Fill the FIFO buffer with at least |numberOfFrames| more data. - void fillBuffer(size_t numberOfFrames); - - // The provider of the data in our FIFO. - AudioSourceProvider& m_provider; - - // The actual FIFO - AudioFIFO m_fifo; - - // Number of frames of data that the provider will produce per call. - unsigned m_providerSize; - - // Temporary workspace to hold the data from the provider. - RefPtr<AudioBus> m_tempBus; -}; - -} // namespace blink - -#endif // AudioPullFIFO.h
diff --git a/third_party/WebKit/Source/platform/audio/PushPullFIFO.cpp b/third_party/WebKit/Source/platform/audio/PushPullFIFO.cpp new file mode 100644 index 0000000..f464e9d --- /dev/null +++ b/third_party/WebKit/Source/platform/audio/PushPullFIFO.cpp
@@ -0,0 +1,145 @@ +// 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/audio/PushPullFIFO.h" + +#include <memory> +#include "platform/audio/AudioUtilities.h" +#include "wtf/PtrUtil.h" + +namespace blink { + +namespace { + +// Suppress the warning log if over/underflow happens more than 100 times. +const unsigned kMaxMessagesToLog = 100; +} + +const size_t PushPullFIFO::kMaxFIFOLength = 65536; + +PushPullFIFO::PushPullFIFO(unsigned numberOfChannels, size_t fifoLength) + : m_fifoLength(fifoLength), + m_framesAvailable(0), + m_indexRead(0), + m_indexWrite(0), + m_overflowCount(0), + m_underflowCount(0) { + CHECK_LE(m_fifoLength, kMaxFIFOLength); + m_fifoBus = AudioBus::create(numberOfChannels, m_fifoLength); +} + +PushPullFIFO::~PushPullFIFO() {} + +// Push the data from |inputBus| to FIFO. The size of push is determined by +// the length of |inputBus|. +void PushPullFIFO::push(const AudioBus* inputBus) { + CHECK(inputBus); + CHECK_EQ(inputBus->length(), AudioUtilities::kRenderQuantumFrames); + SECURITY_CHECK(inputBus->length() <= m_fifoLength); + SECURITY_CHECK(m_indexWrite < m_fifoLength); + + const size_t inputBusLength = inputBus->length(); + const size_t remainder = m_fifoLength - m_indexWrite; + + for (unsigned i = 0; i < m_fifoBus->numberOfChannels(); ++i) { + float* fifoBusChannel = m_fifoBus->channel(i)->mutableData(); + const float* inputBusChannel = inputBus->channel(i)->data(); + if (remainder >= inputBusLength) { + // The remainder is big enough for the input data. + memcpy(fifoBusChannel + m_indexWrite, inputBusChannel, + inputBusLength * sizeof(*fifoBusChannel)); + } else { + // The input data overflows the remainder size. Wrap around the index. + memcpy(fifoBusChannel + m_indexWrite, inputBusChannel, + remainder * sizeof(*fifoBusChannel)); + memcpy(fifoBusChannel, inputBusChannel + remainder, + (inputBusLength - remainder) * sizeof(*fifoBusChannel)); + } + } + + // Update the write index; wrap it around if necessary. + m_indexWrite = (m_indexWrite + inputBusLength) % m_fifoLength; + + // In case of overflow, move the |indexRead| to the updated |indexWrite| to + // avoid reading overwritten frames by the next pull. + if (inputBusLength > m_fifoLength - m_framesAvailable) { + m_indexRead = m_indexWrite; + if (++m_overflowCount < kMaxMessagesToLog) { + LOG(WARNING) << "PushPullFIFO: overflow while pushing (" + << "overflowCount=" << m_overflowCount + << ", availableFrames=" << m_framesAvailable + << ", inputFrames=" << inputBusLength + << ", fifoLength=" << m_fifoLength << ")"; + } + } + + // Update the number of frames available in FIFO. + m_framesAvailable = + std::min(m_framesAvailable + inputBusLength, m_fifoLength); + DCHECK_EQ((m_indexRead + m_framesAvailable) % m_fifoLength, m_indexWrite); +} + +// Pull the data out of FIFO to |outputBus|. If remaining frame in the FIFO +// is less than the frames to pull, provides remaining frame plus the silence. +void PushPullFIFO::pull(AudioBus* outputBus, size_t framesRequested) { + CHECK(outputBus); + SECURITY_CHECK(framesRequested <= outputBus->length()); + SECURITY_CHECK(framesRequested <= m_fifoLength); + SECURITY_CHECK(m_indexRead < m_fifoLength); + + const size_t remainder = m_fifoLength - m_indexRead; + const size_t framesToFill = std::min(m_framesAvailable, framesRequested); + + for (unsigned i = 0; i < m_fifoBus->numberOfChannels(); ++i) { + const float* fifoBusChannel = m_fifoBus->channel(i)->data(); + float* outputBusChannel = outputBus->channel(i)->mutableData(); + + // Fill up the output bus with the available frames first. + if (remainder >= framesToFill) { + // The remainder is big enough for the frames to pull. + memcpy(outputBusChannel, fifoBusChannel + m_indexRead, + framesToFill * sizeof(*fifoBusChannel)); + } else { + // The frames to pull is bigger than the remainder size. + // Wrap around the index. + memcpy(outputBusChannel, fifoBusChannel + m_indexRead, + remainder * sizeof(*fifoBusChannel)); + memcpy(outputBusChannel + remainder, fifoBusChannel, + (framesToFill - remainder) * sizeof(*fifoBusChannel)); + } + + // The frames available was not enough to fulfill the requested frames. Fill + // the rest of the channel with silence. + if (framesRequested > framesToFill) { + memset(outputBusChannel + framesToFill, 0, + (framesRequested - framesToFill) * sizeof(*outputBusChannel)); + } + } + + // Update the read index; wrap it around if necessary. + m_indexRead = (m_indexRead + framesToFill) % m_fifoLength; + + // In case of underflow, move the |indexWrite| to the updated |indexRead|. + if (framesRequested > framesToFill) { + m_indexWrite = m_indexRead; + if (m_underflowCount++ < kMaxMessagesToLog) { + LOG(WARNING) << "PushPullFIFO: underflow while pulling (" + << "underflowCount=" << m_underflowCount + << ", availableFrames=" << m_framesAvailable + << ", requestedFrames=" << framesRequested + << ", fifoLength=" << m_fifoLength << ")"; + } + } + + // Update the number of frames in FIFO. + m_framesAvailable -= framesToFill; + DCHECK_EQ((m_indexRead + m_framesAvailable) % m_fifoLength, m_indexWrite); +} + +const PushPullFIFOStateForTest PushPullFIFO::getStateForTest() const { + return {length(), numberOfChannels(), framesAvailable(), m_indexRead, + m_indexWrite, m_overflowCount, m_underflowCount}; +} + +} // namespace blink
diff --git a/third_party/WebKit/Source/platform/audio/PushPullFIFO.h b/third_party/WebKit/Source/platform/audio/PushPullFIFO.h new file mode 100644 index 0000000..2341372 --- /dev/null +++ b/third_party/WebKit/Source/platform/audio/PushPullFIFO.h
@@ -0,0 +1,85 @@ +// 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. + +#ifndef PushPullFIFO_h +#define PushPullFIFO_h + +#include "platform/audio/AudioBus.h" +#include "public/platform/WebCommon.h" +#include "wtf/Allocator.h" + +namespace blink { + +// A configuration data container for PushPullFIFO unit test. +struct PushPullFIFOStateForTest { + const size_t fifoLength; + const unsigned numberOfChannels; + const size_t framesAvailable; + const size_t indexRead; + const size_t indexWrite; + const unsigned overflowCount; + const unsigned underflowCount; +}; + +// PushPullFIFO class is an intermediate audio sample storage between +// Blink-WebAudio and the renderer. The renderer's hardware callback buffer size +// varies on the platform, but the WebAudio always renders 128 frames (render +// quantum, RQ) thus FIFO is needed to handle the general case. +class BLINK_PLATFORM_EXPORT PushPullFIFO { + USING_FAST_MALLOC(PushPullFIFO); + WTF_MAKE_NONCOPYABLE(PushPullFIFO); + + public: + // Maximum FIFO length. (512 render quanta) + static const size_t kMaxFIFOLength; + + // |fifoLength| cannot exceed |kMaxFIFOLength|. Otherwise it crashes. + explicit PushPullFIFO(unsigned numberOfChannels, size_t fifoLength); + ~PushPullFIFO(); + + // Pushes the rendered frames by WebAudio engine. + // - The |inputBus| length is 128 frames (1 render quantum), fixed. + // - In case of overflow (FIFO full while push), the existing frames in FIFO + // will be overwritten and |indexRead| will be forcibly moved to + // |indexWrite| to avoid reading overwritten frames. + void push(const AudioBus* inputBus); + + // Pulling |framesRequested| by the audio device thread. + // - If |framesRequested| is bigger than the length of |outputBus|, it + // violates SECURITY_CHECK(). + // - If |framesRequested| is bigger than FIFO length, it violates + // SECURITY_CHECK(). + // - In case of underflow (FIFO empty while pull), the remaining space in the + // requested output bus will be filled with silence. Thus it will fulfill + // the request from the consumer without causing error, but with a glitch. + void pull(AudioBus* outputBus, size_t framesRequested); + + size_t framesAvailable() const { return m_framesAvailable; } + size_t length() const { return m_fifoLength; } + unsigned numberOfChannels() const { return m_fifoBus->numberOfChannels(); } + AudioBus* bus() const { return m_fifoBus.get(); } + + // For unit test. Get the current configuration that consists of FIFO length, + // number of channels, read/write index position and under/overflow count. + const PushPullFIFOStateForTest getStateForTest() const; + + private: + // The size of the FIFO. + const size_t m_fifoLength = 0; + + RefPtr<AudioBus> m_fifoBus; + + // The number of frames in the FIFO actually available for pulling. + size_t m_framesAvailable; + + size_t m_indexRead; + size_t m_indexWrite; + + unsigned m_overflowCount; + unsigned m_underflowCount; +}; + +} // namespace blink + +#endif // PushPullFIFO_h
diff --git a/third_party/WebKit/Source/platform/audio/PushPullFIFOTest.cpp b/third_party/WebKit/Source/platform/audio/PushPullFIFOTest.cpp new file mode 100644 index 0000000..cd442b9b --- /dev/null +++ b/third_party/WebKit/Source/platform/audio/PushPullFIFOTest.cpp
@@ -0,0 +1,363 @@ +// 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/audio/PushPullFIFO.h" + +#include <memory> +#include <vector> +#include "platform/audio/AudioUtilities.h" +#include "platform/testing/TestingPlatformSupport.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "wtf/PtrUtil.h" + +namespace blink { + +namespace { + +// Check the basic contract of FIFO. +TEST(PushPullFIFOBasicTest, BasicTests) { + // This suppresses the multi-thread warning for GTest. Potently it increases + // the test execution time, but this specific test is very short and simple. + ::testing::FLAGS_gtest_death_test_style = "threadsafe"; + + // FIFO length exceeding the maximum length allowed will cause crash. + // i.e.) m_fifoLength <= kMaxFIFOLength + EXPECT_DEATH(new PushPullFIFO(2, PushPullFIFO::kMaxFIFOLength + 1), ""); + + std::unique_ptr<PushPullFIFO> testFifo = + WTF::wrapUnique(new PushPullFIFO(2, 1024)); + + // The input bus length must be |AudioUtilities::kRenderQuantumFrames|. + // i.e.) inputBus->length() == kRenderQuantumFrames + RefPtr<AudioBus> inputBusOf129Frames = + AudioBus::create(2, AudioUtilities::kRenderQuantumFrames + 1); + EXPECT_DEATH(testFifo->push(inputBusOf129Frames.get()), ""); + RefPtr<AudioBus> inputBusOf127Frames = + AudioBus::create(2, AudioUtilities::kRenderQuantumFrames - 1); + EXPECT_DEATH(testFifo->push(inputBusOf127Frames.get()), ""); + + // Pull request frames cannot exceed the length of output bus. + // i.e.) framesRequested <= outputBus->length() + RefPtr<AudioBus> outputBusOf512Frames = AudioBus::create(2, 512); + EXPECT_DEATH(testFifo->pull(outputBusOf512Frames.get(), 513), ""); + + // Pull request frames cannot exceed the length of FIFO. + // i.e.) framesRequested <= m_fifoLength + RefPtr<AudioBus> outputBusOf1025Frames = AudioBus::create(2, 1025); + EXPECT_DEATH(testFifo->pull(outputBusOf1025Frames.get(), 1025), ""); +} + +// Fills each AudioChannel in an AudioBus with a series of linearly increasing +// values starting from |startingValue| and incrementing by 1. Then return value +// will be |startingValue| + |bus_length|. +size_t fillBusWithLinearRamp(AudioBus* targetBus, size_t startingValue) { + for (unsigned c = 0; c < targetBus->numberOfChannels(); ++c) { + float* busChannel = targetBus->channel(c)->mutableData(); + for (size_t i = 0; i < targetBus->channel(c)->length(); ++i) { + busChannel[i] = static_cast<float>(startingValue + i); + } + } + return startingValue + targetBus->length(); +} + +// Inspect the content of AudioBus with a given set of index and value across +// channels. +bool verifyBusValueAtIndex(AudioBus* targetBus, + int index, + float expectedValue) { + for (unsigned c = 0; c < targetBus->numberOfChannels(); ++c) { + float* busChannel = targetBus->channel(c)->mutableData(); + if (busChannel[index] != expectedValue) { + LOG(ERROR) << ">> [FAIL] expected " << expectedValue << " at index " + << index << " but got " << busChannel[index] << "."; + return false; + } + } + return true; +} + +struct FIFOAction { + // The type of action; "PUSH" or "PULL". + const char* action; + // Number of frames for the operation. + const size_t numberOfFrames; +}; + +struct AudioBusSample { + // The frame index of a sample in the bus. + const size_t index; + // The value at the |index| above. + const float value; +}; + +struct FIFOTestSetup { + // Length of FIFO to be created for test case. + const size_t fifoLength; + // Channel count of FIFO to be created for test case. + const unsigned numberOfChannels; + // A list of |FIFOAction| entries to be performed in test case. + const std::vector<FIFOAction> fifoActions; +}; + +struct FIFOTestExpectedState { + // Expected read index in FIFO. + const size_t indexRead; + // Expected write index in FIFO. + const size_t indexWrite; + // Expected overflow count in FIFO. + const unsigned overflowCount; + // Expected underflow count in FIFO. + const unsigned underflowCount; + // A list of expected |AudioBusSample| entries for the FIFO bus. + const std::vector<AudioBusSample> fifoSamples; + // A list of expected |AudioBusSample| entries for the output bus. + const std::vector<AudioBusSample> outputSamples; +}; + +// The data structure for the parameterized test cases. +struct FIFOTestParam { + FIFOTestSetup setup; + FIFOTestExpectedState expectedState; +}; + +std::ostream& operator<<(std::ostream& out, const FIFOTestParam& param) { + out << "fifoLength=" << param.setup.fifoLength + << " numberOfChannels=" << param.setup.numberOfChannels; + return out; +} + +class PushPullFIFOFeatureTest : public ::testing::TestWithParam<FIFOTestParam> { +}; + +TEST_P(PushPullFIFOFeatureTest, FeatureTests) { + const FIFOTestSetup setup = GetParam().setup; + const FIFOTestExpectedState expectedState = GetParam().expectedState; + + // Create a FIFO with a specified configuration. + std::unique_ptr<PushPullFIFO> fifo = WTF::wrapUnique( + new PushPullFIFO(setup.numberOfChannels, setup.fifoLength)); + + RefPtr<AudioBus> outputBus; + + // Iterate all the scheduled push/pull actions. + size_t frameCounter = 0; + for (const auto& action : setup.fifoActions) { + if (strcmp(action.action, "PUSH") == 0) { + RefPtr<AudioBus> inputBus = + AudioBus::create(setup.numberOfChannels, action.numberOfFrames); + frameCounter = fillBusWithLinearRamp(inputBus.get(), frameCounter); + fifo->push(inputBus.get()); + LOG(INFO) << "PUSH " << action.numberOfFrames + << " frames (frameCounter=" << frameCounter << ")"; + } else { + outputBus = + AudioBus::create(setup.numberOfChannels, action.numberOfFrames); + fifo->pull(outputBus.get(), action.numberOfFrames); + LOG(INFO) << "PULL " << action.numberOfFrames << " frames"; + } + } + + // Get FIFO config data. + const PushPullFIFOStateForTest actualState = fifo->getStateForTest(); + + // Verify the read/write indexes. + EXPECT_EQ(expectedState.indexRead, actualState.indexRead); + EXPECT_EQ(expectedState.indexWrite, actualState.indexWrite); + EXPECT_EQ(expectedState.overflowCount, actualState.overflowCount); + EXPECT_EQ(expectedState.underflowCount, actualState.underflowCount); + + // Verify in-FIFO samples. + for (const auto& sample : expectedState.fifoSamples) { + EXPECT_TRUE(verifyBusValueAtIndex(fifo->bus(), sample.index, sample.value)); + } + + // Verify samples from the most recent output bus. + for (const auto& sample : expectedState.outputSamples) { + EXPECT_TRUE( + verifyBusValueAtIndex(outputBus.get(), sample.index, sample.value)); + } +} + +FIFOTestParam featureTestParams[] = { + // Test cases 0 ~ 3: Regular operation on various channel configuration. + // - Mono, Stereo, Quad, 5.1. + // - FIFO length and pull size are RQ-aligned. + {{512, 1, {{"PUSH", 128}, {"PUSH", 128}, {"PULL", 256}}}, + {256, 256, 0, 0, {{0, 0}}, {{0, 0}, {255, 255}}}}, + + {{512, 2, {{"PUSH", 128}, {"PUSH", 128}, {"PULL", 256}}}, + {256, 256, 0, 0, {{0, 0}}, {{0, 0}, {255, 255}}}}, + + {{512, 4, {{"PUSH", 128}, {"PUSH", 128}, {"PULL", 256}}}, + {256, 256, 0, 0, {{0, 0}}, {{0, 0}, {255, 255}}}}, + + {{512, 6, {{"PUSH", 128}, {"PUSH", 128}, {"PULL", 256}}}, + {256, 256, 0, 0, {{0, 0}}, {{0, 0}, {255, 255}}}}, + + // Test case 4: Pull size less than or equal to 128. + {{128, 2, {{"PUSH", 128}, {"PULL", 128}, {"PUSH", 128}, {"PULL", 64}}}, + {64, 0, 0, 0, {{64, 192}, {0, 128}}, {{0, 128}, {63, 191}}}}, + + // Test case 5: Unusual FIFO and Pull length. + // - FIFO and pull length that are not aligned to render quantum. + // - Check if the indexes are wrapping around correctly. + // - Check if the output bus starts and ends with correct values. + {{997, + 1, + { + {"PUSH", 128}, + {"PUSH", 128}, + {"PUSH", 128}, + {"PUSH", 128}, + {"PULL", 449}, + {"PUSH", 128}, + {"PUSH", 128}, + {"PUSH", 128}, + {"PUSH", 128}, + {"PULL", 449}, + }}, + // - expectedIndexRead = 898, expectedIndexWrite = 27 + // - overflowCount = 0, underflowCount = 0 + // - FIFO samples (index, expectedValue) = (898, 898), (27, 27) + // - Output bus samples (index, expectedValue) = (0, 499), (448, 897) + {898, 27, 0, 0, {{898, 898}, {27, 27}}, {{0, 449}, {448, 897}}}}, + + // Test case 6: Overflow + // - Check overflow counter. + // - After the overflow occurs, the read index must be moved to the write + // index. Thus pulled frames must not contain overwritten data. + {{512, + 3, + { + {"PUSH", 128}, + {"PUSH", 128}, + {"PUSH", 128}, + {"PUSH", 128}, + {"PUSH", 128}, + {"PULL", 256}, + }}, + // - expectedIndexRead = 384, expectedIndexWrite = 128 + // - overflowCount = 1, underflowCount = 0 + // - FIFO samples (index, expectedValue) = (384, 384), (128, 128) + // - Output bus samples (index, expectedValue) = (0, 128), (255, 383) + {384, 128, 1, 0, {{384, 384}, {128, 128}}, {{0, 128}, {255, 383}}}}, + + // Test case 7: Overflow in unusual FIFO and pull length. + // - Check overflow counter. + // - After the overflow occurs, the read index must be moved to the write + // index. Thus pulled frames must not contain overwritten data. + {{577, + 5, + { + {"PUSH", 128}, + {"PUSH", 128}, + {"PUSH", 128}, + {"PUSH", 128}, + {"PUSH", 128}, + {"PULL", 227}, + }}, + // - expectedIndexRead = 290, expectedIndexWrite = 63 + // - overflowCount = 1, underflowCount = 0 + // - FIFO samples (index, expectedValue) = (63, 63), (290, 290) + // - Output bus samples (index, expectedValue) = (0, 63), (226, 289) + {290, 63, 1, 0, {{63, 63}, {290, 290}}, {{0, 63}, {226, 289}}}}, + + // Test case 8: Underflow + // - Check underflow counter. + // - After the underflow occurs, the write index must be moved to the read + // index. Frames pulled after FIFO underflows must be zeroed. + {{512, + 7, + { + {"PUSH", 128}, + {"PUSH", 128}, + {"PUSH", 128}, + {"PULL", 384}, + {"PUSH", 128}, + {"PUSH", 128}, + {"PULL", 384}, + }}, + // - expectedIndexRead = 128, expectedIndexWrite = 128 + // - overflowCount = 0, underflowCount = 1 + // - FIFO samples (index, expectedValue) = (128, 128) + // - Output bus samples (index, expectedValue) = (0, 384), (255, 639) + // (256, 0), (383, 0) + {128, + 128, + 0, + 1, + {{128, 128}}, + {{0, 384}, {255, 639}, {256, 0}, {383, 0}}}}, + + // Test case 9: Underflow in unusual FIFO and pull length. + // - Check underflow counter. + // - After the underflow occurs, the write index must be moved to the read + // index. Frames pulled after FIFO underflows must be zeroed. + {{523, + 11, + { + {"PUSH", 128}, + {"PUSH", 128}, + {"PUSH", 128}, + {"PULL", 383}, + {"PUSH", 128}, + {"PUSH", 128}, + {"PULL", 383}, + }}, + // - expectedIndexRead = 117, expectedIndexWrite = 117 + // - overflowCount = 0, underflowCount = 1 + // - FIFO samples (index, expectedValue) = (117, 117) + // - Output bus samples (index, expectedValue) = (0, 383), (256, 639) + // (257, 0), (382, 0) + {117, + 117, + 0, + 1, + {{117, 117}}, + {{0, 383}, {256, 639}, {257, 0}, {382, 0}}}}, + + // Test case 10: Multiple pull from an empty FIFO. + // - Check underflow counter. + // - After the underflow occurs, the write index must be moved to the read + // index. Frames pulled after FIFO underflows must be zeroed. + {{1024, + 11, + { + {"PUSH", 128}, + {"PUSH", 128}, + {"PULL", 440}, + {"PULL", 440}, + {"PULL", 440}, + {"PULL", 440}, + {"PULL", 440}, + }}, + // - expectedIndexRead = 117, expectedIndexWrite = 117 + // - overflowCount = 0, underflowCount = 1 + // - FIFO samples (index, expectedValue) = (117, 117) + // - Output bus samples (index, expectedValue) = (0, 383), (256, 639) + // (257, 0), (382, 0) + {256, 256, 0, 5, {{256, 0}}, {{0, 0}, {439, 0}}}}, + + // Test case 11: Multiple pull from an empty FIFO. (zero push) + {{1024, + 11, + { + {"PULL", 144}, + {"PULL", 144}, + {"PULL", 144}, + {"PULL", 144}, + }}, + // - expectedIndexRead = 0, expectedIndexWrite = 0 + // - overflowCount = 0, underflowCount = 4 + // - FIFO samples (index, expectedValue) = (0, 0), (1023, 0) + // - Output bus samples (index, expectedValue) = (0, 0), (143, 0) + {0, 0, 0, 4, {{0, 0}, {1023, 0}}, {{0, 0}, {143, 0}}}}}; + +INSTANTIATE_TEST_CASE_P(PushPullFIFOFeatureTest, + PushPullFIFOFeatureTest, + ::testing::ValuesIn(featureTestParams)); + +} // namespace + +} // namespace blink
diff --git a/third_party/WebKit/Source/platform/loader/fetch/Resource.cpp b/third_party/WebKit/Source/platform/loader/fetch/Resource.cpp index 201eea4..d6060abd 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/Resource.cpp +++ b/third_party/WebKit/Source/platform/loader/fetch/Resource.cpp
@@ -842,9 +842,7 @@ destroyDecodedDataIfPossible(); } -void Resource::onMemoryStateChange(MemoryState state) { - if (state != MemoryState::SUSPENDED) - return; +void Resource::onPurgeMemory() { prune(); if (!m_cacheHandler) return; @@ -983,8 +981,24 @@ resourceRequest().cacheControlContainsNoStore(); } -bool Resource::hasVaryHeader() const { - return !response().httpHeaderField(HTTPNames::Vary).isNull(); +bool Resource::mustReloadDueToVaryHeader( + const ResourceRequest& newRequest) const { + const AtomicString& vary = response().httpHeaderField(HTTPNames::Vary); + if (vary.isNull()) + return false; + if (vary == "*") + return true; + + CommaDelimitedHeaderSet varyHeaders; + parseCommaDelimitedHeader(vary, varyHeaders); + for (const String& header : varyHeaders) { + AtomicString atomicHeader(header); + if (resourceRequest().httpHeaderField(atomicHeader) != + newRequest.httpHeaderField(atomicHeader)) { + return true; + } + } + return false; } bool Resource::mustRevalidateDueToCacheHeaders() const {
diff --git a/third_party/WebKit/Source/platform/loader/fetch/Resource.h b/third_party/WebKit/Source/platform/loader/fetch/Resource.h index ac68d27..c17ba26 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/Resource.h +++ b/third_party/WebKit/Source/platform/loader/fetch/Resource.h
@@ -264,7 +264,7 @@ bool canUseCacheValidator() const; bool isCacheValidator() const { return m_isRevalidating; } bool hasCacheControlNoStoreHeader() const; - bool hasVaryHeader() const; + bool mustReloadDueToVaryHeader(const ResourceRequest& newRequest) const; bool isEligibleForIntegrityCheck(SecurityOrigin*) const; @@ -425,7 +425,7 @@ String reasonNotDeletable() const; // MemoryCoordinatorClient overrides: - void onMemoryStateChange(MemoryState) override; + void onPurgeMemory() override; Member<CachedMetadataHandlerImpl> m_cacheHandler; RefPtr<SecurityOrigin> m_fetcherSecurityOrigin;
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp b/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp index 5f21df7..9dc5030f 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp +++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcher.cpp
@@ -970,8 +970,7 @@ existingResource == cachedResource(request.url())) return Use; - // Defer to the browser process cache for Vary header handling. - if (existingResource->hasVaryHeader()) + if (existingResource->mustReloadDueToVaryHeader(request)) return Reload; // If any of the redirects in the chain to loading the resource were not
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcherTest.cpp b/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcherTest.cpp index 3cd79b5..6be9d2a9 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcherTest.cpp +++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceFetcherTest.cpp
@@ -154,7 +154,7 @@ response.setHTTPHeaderField(HTTPNames::Vary, "*"); resource->responseReceived(response, nullptr); resource->finish(); - ASSERT_TRUE(resource->hasVaryHeader()); + ASSERT_TRUE(resource->mustReloadDueToVaryHeader(url)); ResourceFetcher* fetcher = ResourceFetcher::create(context()); ResourceRequest resourceRequest(url); @@ -220,7 +220,7 @@ response.setHTTPHeaderField(HTTPNames::Vary, "*"); resource->responseReceived(response, nullptr); resource->finish(); - ASSERT_TRUE(resource->hasVaryHeader()); + ASSERT_TRUE(resource->mustReloadDueToVaryHeader(url)); ResourceRequest resourceRequest(url); resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); @@ -245,7 +245,7 @@ Resource* resource = MockResource::fetch(fetchRequestOriginal, fetcher); ASSERT_TRUE(resource); Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); - ASSERT_TRUE(resource->hasVaryHeader()); + ASSERT_TRUE(resource->mustReloadDueToVaryHeader(url)); FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); Resource* newResource = MockResource::fetch(fetchRequest, fetcher);
diff --git a/third_party/WebKit/Source/platform/loader/fetch/ResourceTest.cpp b/third_party/WebKit/Source/platform/loader/fetch/ResourceTest.cpp index a421b17..a887e42 100644 --- a/third_party/WebKit/Source/platform/loader/fetch/ResourceTest.cpp +++ b/third_party/WebKit/Source/platform/loader/fetch/ResourceTest.cpp
@@ -90,4 +90,61 @@ resource->responseReceived(revalidatingResponse, nullptr); } +TEST(ResourceTest, Vary) { + ScopedTestingPlatformSupport<MockPlatform> mock; + KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); + ResourceResponse response; + response.setURL(url); + response.setHTTPStatusCode(200); + + Resource* resource = RawResource::create(url, Resource::Raw); + resource->responseReceived(response, nullptr); + resource->finish(); + + ResourceRequest newRequest(url); + EXPECT_FALSE(resource->mustReloadDueToVaryHeader(newRequest)); + + response.setHTTPHeaderField(HTTPNames::Vary, "*"); + resource->setResponse(response); + EXPECT_TRUE(resource->mustReloadDueToVaryHeader(newRequest)); + + // Irrelevant header + response.setHTTPHeaderField(HTTPNames::Vary, "definitelynotarealheader"); + resource->setResponse(response); + EXPECT_FALSE(resource->mustReloadDueToVaryHeader(newRequest)); + + // Header present on new but not old + newRequest.setHTTPHeaderField(HTTPNames::User_Agent, "something"); + response.setHTTPHeaderField(HTTPNames::Vary, HTTPNames::User_Agent); + resource->setResponse(response); + EXPECT_TRUE(resource->mustReloadDueToVaryHeader(newRequest)); + newRequest.clearHTTPHeaderField(HTTPNames::User_Agent); + + ResourceRequest oldRequest(url); + oldRequest.setHTTPHeaderField(HTTPNames::User_Agent, "something"); + oldRequest.setHTTPHeaderField(HTTPNames::Referer, "http://foo.com"); + resource = RawResource::create(oldRequest, Resource::Raw); + resource->responseReceived(response, nullptr); + resource->finish(); + + // Header present on old but not new + newRequest.clearHTTPHeaderField(HTTPNames::User_Agent); + response.setHTTPHeaderField(HTTPNames::Vary, HTTPNames::User_Agent); + resource->setResponse(response); + EXPECT_TRUE(resource->mustReloadDueToVaryHeader(newRequest)); + + // Header present on both + newRequest.setHTTPHeaderField(HTTPNames::User_Agent, "something"); + EXPECT_FALSE(resource->mustReloadDueToVaryHeader(newRequest)); + + // One matching, one mismatching + response.setHTTPHeaderField(HTTPNames::Vary, "User-Agent, Referer"); + resource->setResponse(response); + EXPECT_TRUE(resource->mustReloadDueToVaryHeader(newRequest)); + + // Two matching + newRequest.setHTTPHeaderField(HTTPNames::Referer, "http://foo.com"); + EXPECT_FALSE(resource->mustReloadDueToVaryHeader(newRequest)); +} + } // namespace blink
diff --git a/third_party/WebKit/Source/web/WebIDBKey.cpp b/third_party/WebKit/Source/web/WebIDBKey.cpp index 187ee5d..ebc288b5 100644 --- a/third_party/WebKit/Source/web/WebIDBKey.cpp +++ b/third_party/WebKit/Source/web/WebIDBKey.cpp
@@ -139,7 +139,7 @@ case IDBKey::InvalidType: keys[i] = WebIDBKey::createInvalid(); break; - case IDBKey::MinType: + case IDBKey::TypeEnumMax: NOTREACHED(); break; }
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/html_diff.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/html_diff.py index 5600033..2b04891 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/common/html_diff.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/html_diff.py
@@ -11,6 +11,7 @@ although it outputs a larger and more complex HTML table than we need. """ +import cgi import difflib _TEMPLATE = """<html> @@ -53,12 +54,12 @@ if tag == 'replace': return _format_delete(a_chunk) + _format_insert(b_chunk) assert tag == 'equal' - return a_chunk + return cgi.escape(a_chunk) def _format_insert(chunk): - return '<span class="add">%s</span>' % chunk + return '<span class="add">%s</span>' % cgi.escape(chunk) def _format_delete(chunk): - return '<span class="del">%s</span>' % chunk + return '<span class="del">%s</span>' % cgi.escape(chunk)
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/html_diff_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/html_diff_unittest.py index 47bbf351..7779775 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/common/html_diff_unittest.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/html_diff_unittest.py
@@ -29,16 +29,25 @@ self.assertEqual( html_diff_body(['one line\n'], ['one line\n']), 'one line\n') + self.assertEqual( + html_diff_body(['<script>\n'], ['<script>\n']), + '<script>\n') def test_html_diff_delete(self): self.assertEqual( html_diff_body(['one line\n'], []), '<span class="del">one line\n</span>') + self.assertEqual( + html_diff_body(['</pre>\n'], []), + '<span class="del"></pre>\n</span>') def test_html_diff_insert(self): self.assertEqual( html_diff_body([], ['one line\n']), '<span class="add">one line\n</span>') + self.assertEqual( + html_diff_body([], ['<!--\n']), + '<span class="add"><!--\n</span>') def test_html_diff_ending_newline(self): self.assertEqual(
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py index 251335f7..3b504fe 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer.py
@@ -77,12 +77,15 @@ if options.target == 'wpt' and not options.ignore_exportable_commits: commits = self.exportable_but_not_exported_commits(temp_repo_path) if commits: - _log.error('There were exportable but not-yet-exported commits:') + # If there are exportable commits, then there's no more work + # to do for now. This isn't really an error case; we expect + # to hit this case some of the time. + _log.info('There were exportable but not-yet-exported commits:') for commit in commits: - _log.error(' https://chromium.googlesource.com/chromium/src/+/%s', commit.sha) - _log.error('Aborting import to prevent clobbering these commits.') + _log.info(' https://chromium.googlesource.com/chromium/src/+/%s', commit.sha) + _log.info('Aborting import to prevent clobbering these commits.') self.clean_up_temp_repo(temp_repo_path) - return 1 + return 0 import_commit = self.update(dest_dir_name, temp_repo_path, options.revision)
diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer_unittest.py b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer_unittest.py index 506d77b3..f984fc6 100644 --- a/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer_unittest.py +++ b/third_party/WebKit/Tools/Scripts/webkitpy/w3c/test_importer_unittest.py
@@ -22,13 +22,13 @@ MockChromiumCommit(sha='deadbeef', position=123)] importer.checkout_is_okay = lambda _: True return_code = importer.main(['wpt']) - self.assertEqual(return_code, 1) + self.assertEqual(return_code, 0) self.assertLog([ 'INFO: Cloning repo: https://chromium.googlesource.com/external/w3c/web-platform-tests.git\n', 'INFO: Local path: /mock-checkout/third_party/WebKit/wpt\n', - 'ERROR: There were exportable but not-yet-exported commits:\n', - 'ERROR: https://chromium.googlesource.com/chromium/src/+/deadbeef\n', - 'ERROR: Aborting import to prevent clobbering these commits.\n', + 'INFO: There were exportable but not-yet-exported commits:\n', + 'INFO: https://chromium.googlesource.com/chromium/src/+/deadbeef\n', + 'INFO: Aborting import to prevent clobbering these commits.\n', 'INFO: Deleting temp repo directory /mock-checkout/third_party/WebKit/wpt.\n', ])
diff --git a/third_party/WebKit/Tools/Scripts/wpt-export b/third_party/WebKit/Tools/Scripts/wpt-export index f9b3f2b..c107e70 100755 --- a/third_party/WebKit/Tools/Scripts/wpt-export +++ b/third_party/WebKit/Tools/Scripts/wpt-export
@@ -46,7 +46,7 @@ host = Host() if not args.gh_user: - args.user = host.environ.get('GH_USER') + args.gh_user = host.environ.get('GH_USER') if not args.gh_token: args.gh_token = host.environ.get('GH_TOKEN') if args.github_credentials_json:
diff --git a/third_party/WebKit/public/platform/WebFeaturePolicy.h b/third_party/WebKit/public/platform/WebFeaturePolicy.h index b0394a5..5b8bdfb 100644 --- a/third_party/WebKit/public/platform/WebFeaturePolicy.h +++ b/third_party/WebKit/public/platform/WebFeaturePolicy.h
@@ -11,6 +11,42 @@ namespace blink { +// These values map to the features which can be controlled by Feature Policy. +// TODO(iclelland): Link to the spec where the behaviour for each of these is +// defined. +enum class WebFeaturePolicyFeature { + NotFound = 0, + // Controls access to document.cookie attribute. + DocumentCookie, + // Contols access to document.domain attribute. + DocumentDomain, + // Controls access to document.write and document.writeln methods. + DocumentWrite, + // Controls whether Element.requestFullscreen is allowed. + Fullscreen, + // Controls access to Geolocation interface. + Geolocation, + // Controls access to requestMIDIAccess method. + MidiFeature, + // Controls access to Notification interface. + Notifications, + // Controls access to PaymentRequest interface. + Payment, + // Controls access to PushManager interface. + Push, + // Controls whether synchronous script elements will run. + SyncScript, + // Controls use of synchronous XMLHTTPRequest API. + SyncXHR, + // Controls access to NavigatorUserMedia interface. + Usermedia, + // Controls access to navigator.vibrate method. + Vibrate, + // Controls access to RTCPeerConnection interface. + WebRTC, + LAST_FEATURE = WebRTC +}; + struct WebParsedFeaturePolicyDeclaration { WebParsedFeaturePolicyDeclaration() : matchesAllOrigins(false) {} WebString featureName;
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index a3ef4ae2..539e6baf 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -46045,6 +46045,28 @@ </summary> </histogram> +<histogram name="Permissions.AutoBlocker.SafeBrowsingResponse" + enum="SafeBrowsingResponse"> + <owner>dominickn@chromium.org</owner> + <owner>kcarattini@chromium.org</owner> + <summary> + Tracks the response (if received) from Safe Browsing when the API blacklist + is queried for an (origin, permission) pair. The response could be that the + origin was blacklisted, not blacklisted, or Safe Browsing timed out before a + response was received. + </summary> +</histogram> + +<histogram name="Permissions.AutoBlocker.SafeBrowsingResponseTime" units="ms"> + <owner>dominickn@chromium.org</owner> + <owner>kcarattini@chromium.org</owner> + <summary> + Records the elapsed time between the client sending a request to Safe + Browsing and receiving a result, or the maximum wait time is exceeded and + Safe Browsing is deemed to have timed out. + </summary> +</histogram> + <histogram name="Permissions.Prompt.Accepted" enum="PermissionRequestType"> <owner>dominickn@chromium.org</owner> <owner>kcarattini@chromium.org</owner> @@ -54102,6 +54124,9 @@ </histogram> <histogram name="Renderer4.ReadyToDrawTileDrawStatus" enum="UsedInDraw"> + <obsolete> + Deprecated 02/2017 in Issue 675840. + </obsolete> <owner>vmpstr@chromium.org</owner> <summary> For each tile that was ready to draw at some point, logs whether the tile @@ -70917,12 +70942,11 @@ <summary>The status when loading UKM PersistedLogs from Prefs.</summary> </histogram> -<histogram name="UKM.Sources.MaxSourcesHit" units="BooleanHit"> +<histogram name="UKM.Sources.Dropped" enum="UkmSourceDroppedReason"> <owner>holte@chromium.org</owner> <owner>rkaplow@chromium.org</owner> <summary> - Counter for the number of times an UKM source was discarded due to the max - in-memory limit being hit. + Counters for the rate at which UKM Sources are dropped for various reasons. </summary> </histogram> @@ -74691,6 +74715,26 @@ </summary> </histogram> +<histogram name="WebCore.IndexedDB.ObjectStore.IndexEntry.KeyType" + enum="IDBKeyType"> + <owner>jsbell@chromium.org</owner> + <summary> + The type of key (number, string, etc.) used for an index entry for a record + being newly stored or updated in an Indexed DB object store. For array keys, + the types of sub-keys are not recorded. + </summary> +</histogram> + +<histogram name="WebCore.IndexedDB.ObjectStore.Record.KeyType" + enum="IDBKeyType"> + <owner>jsbell@chromium.org</owner> + <summary> + The type of key (number, string, etc.) used for a record being newly stored + or updated in an Indexed DB object store. For array keys, the types of + sub-keys are not recorded. + </summary> +</histogram> + <histogram name="WebCore.IndexedDB.OpenTime.Blocked" units="ms"> <owner>cmumford@chromium.org</owner> <summary> @@ -93983,6 +94027,15 @@ <int value="2" label="Array">Key path is an array of strings.</int> </enum> +<enum name="IDBKeyType" type="int"> + <int value="0" label="Invalid">Invalid key.</int> + <int value="1" label="Array">Key is an array.</int> + <int value="2" label="Binary">Key is a binary buffer.</int> + <int value="3" label="String">Key is a string.</int> + <int value="4" label="Date">Key is a date.</int> + <int value="5" label="Number">Key is a number.</int> +</enum> + <enum name="IDBLevelDBBackingStoreInternalErrorType" type="int"> <int value="0" label="IDBLevelDBBackingStoreReadError"> IndexedDB encountered an error attempting to read or decode a value from the @@ -104910,6 +104963,12 @@ <int value="4" label="NO_STATE_ERROR"/> </enum> +<enum name="SafeBrowsingResponse" type="int"> + <int value="0" label="NOT_BLACKLISTED"/> + <int value="1" label="TIMEOUT"/> + <int value="2" label="BLACKLISTED"/> +</enum> + <enum name="SafeBrowsingV4ApplyUpdateResult" type="int"> <int value="0" label="APPLY_UPDATE_SUCCESS"/> <int value="1" label="UNEXPECTED_APPLY_UPDATE_FAILURE"/> @@ -109377,6 +109436,12 @@ <int value="36" label="Tap unconfirmed"/> </enum> +<enum name="UkmSourceDroppedReason" type="int"> + <int value="0" label="Not dropped"/> + <int value="1" label="Recording disabled"/> + <int value="2" label="Max sources hit"/> +</enum> + <enum name="UmaCleanExitConsistency" type="int"> <int value="0" label="Dirty/Dirty (Registry/Local State)"/> <int value="1" label="Dirty/Clean (Registry/Local State)"/> @@ -109648,6 +109713,9 @@ </enum> <enum name="UsedInDraw" type="int"> + <obsolete> + Deprecated 02/2017 in Issue 675840. + </obsolete> <int value="0" label="Was not used in draw"/> <int value="1" label="Was used in draw"/> </enum>
diff --git a/ui/aura/mus/window_tree_client.cc b/ui/aura/mus/window_tree_client.cc index b71391b..ec6baf2 100644 --- a/ui/aura/mus/window_tree_client.cc +++ b/ui/aura/mus/window_tree_client.cc
@@ -145,6 +145,21 @@ .device_scale_factor(); } +void ConvertEventLocationToDip(int64_t display_id, ui::LocatedEvent* event) { + display::Screen* screen = display::Screen::GetScreen(); + display::Display display; + if (!screen->GetDisplayWithDisplayId(display_id, &display) || + display.device_scale_factor() == 1.f) { + return; + } + const gfx::Point host_location = + gfx::ConvertPointToDIP(display.device_scale_factor(), event->location()); + event->set_location(host_location); + const gfx::Point root_location = gfx::ConvertPointToDIP( + display.device_scale_factor(), event->root_location()); + event->set_root_location(root_location); +} + } // namespace WindowTreeClient::WindowTreeClient( @@ -1114,6 +1129,7 @@ void WindowTreeClient::OnWindowInputEvent(uint32_t event_id, Id window_id, + int64_t display_id, std::unique_ptr<ui::Event> event, bool matches_pointer_watcher) { DCHECK(event); @@ -1134,13 +1150,13 @@ if (matches_pointer_watcher && has_pointer_watcher_) { DCHECK(event->IsPointerEvent()); - delegate_->OnPointerEventObserved(*event->AsPointerEvent(), + std::unique_ptr<ui::Event> event_in_dip(ui::Event::Clone(*event)); + ConvertEventLocationToDip(display_id, event_in_dip->AsLocatedEvent()); + delegate_->OnPointerEventObserved(*event_in_dip->AsPointerEvent(), window ? window->GetWindow() : nullptr); } - // TODO: deal with no window or host here. This could happen if during - // dispatch a window is deleted or moved. In either case we still need to - // dispatch. Most likely need the display id. + // TODO: use |display_id| to find host and send there. if (!window || !window->GetWindow()->GetHost()) { tree_->OnWindowInputEventAck(event_id, ui::mojom::EventResult::UNHANDLED); return; @@ -1179,12 +1195,14 @@ } void WindowTreeClient::OnPointerEventObserved(std::unique_ptr<ui::Event> event, - uint32_t window_id) { + uint32_t window_id, + int64_t display_id) { DCHECK(event); DCHECK(event->IsPointerEvent()); if (!has_pointer_watcher_) return; + ConvertEventLocationToDip(display_id, event->AsLocatedEvent()); WindowMus* target_window = GetWindowByServerId(window_id); delegate_->OnPointerEventObserved( *event->AsPointerEvent(),
diff --git a/ui/aura/mus/window_tree_client.h b/ui/aura/mus/window_tree_client.h index 09dc89ba..4640e87a 100644 --- a/ui/aura/mus/window_tree_client.h +++ b/ui/aura/mus/window_tree_client.h
@@ -334,10 +334,12 @@ const base::Optional<std::vector<uint8_t>>& transport_data) override; void OnWindowInputEvent(uint32_t event_id, Id window_id, + int64_t display_id, std::unique_ptr<ui::Event> event, bool matches_pointer_watcher) override; void OnPointerEventObserved(std::unique_ptr<ui::Event> event, - uint32_t window_id) override; + uint32_t window_id, + int64_t display_id) override; void OnWindowFocused(Id focused_window_id) override; void OnWindowPredefinedCursorChanged(Id window_id, ui::mojom::Cursor cursor) override;
diff --git a/ui/aura/mus/window_tree_client_unittest.cc b/ui/aura/mus/window_tree_client_unittest.cc index a804d3b..76dcf10 100644 --- a/ui/aura/mus/window_tree_client_unittest.cc +++ b/ui/aura/mus/window_tree_client_unittest.cc
@@ -36,9 +36,12 @@ #include "ui/aura/window_tree_host_observer.h" #include "ui/base/class_property.h" #include "ui/compositor/compositor.h" +#include "ui/display/display.h" #include "ui/display/display_switches.h" +#include "ui/display/screen.h" #include "ui/events/event.h" #include "ui/events/event_utils.h" +#include "ui/gfx/geometry/dip_util.h" #include "ui/gfx/geometry/rect.h" namespace aura { @@ -109,14 +112,23 @@ WindowTreeClientClientTestHighDPI() {} ~WindowTreeClientClientTestHighDPI() override {} + const ui::PointerEvent* last_event_observed() const { + return last_event_observed_.get(); + } + // WindowTreeClientClientTest: void SetUp() override { base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( switches::kForceDeviceScaleFactor, "2"); WindowTreeClientClientTest::SetUp(); } + void OnPointerEventObserved(const ui::PointerEvent& event, + Window* target) override { + last_event_observed_.reset(new ui::PointerEvent(event)); + } private: + std::unique_ptr<ui::PointerEvent> last_event_observed_; DISALLOW_COPY_AND_ASSIGN(WindowTreeClientClientTestHighDPI); }; @@ -534,7 +546,7 @@ gfx::Point(), ui::EventTimeForNow(), ui::EF_NONE, 0)); window_tree_client()->OnWindowInputEvent( InputEventBasicTestWindowDelegate::kEventId, server_id(&child), - ui::Event::Clone(*ui_event.get()), 0); + window_tree_host.display_id(), ui::Event::Clone(*ui_event.get()), 0); EXPECT_TRUE(window_tree()->WasEventAcked( InputEventBasicTestWindowDelegate::kEventId)); EXPECT_EQ(ui::mojom::EventResult::HANDLED, @@ -585,7 +597,7 @@ 0, ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH), base::TimeTicks())); window_tree_client()->OnPointerEventObserved(std::move(pointer_event_down), - 0u); + 0u, 0); // Delegate sensed the event. const ui::PointerEvent* last_event = last_event_observed(); @@ -602,7 +614,8 @@ ui::ET_POINTER_UP, gfx::Point(), gfx::Point(), ui::EF_CONTROL_DOWN, 1, 0, ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH), base::TimeTicks())); - window_tree_client()->OnPointerEventObserved(std::move(pointer_event_up), 0u); + window_tree_client()->OnPointerEventObserved(std::move(pointer_event_up), 0u, + 0); // No event was sensed. EXPECT_FALSE(last_event_observed()); @@ -625,7 +638,7 @@ ui::ET_POINTER_DOWN, gfx::Point(), gfx::Point(), ui::EF_CONTROL_DOWN, 1, 0, ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH), base::TimeTicks::Now())); - window_tree_client()->OnWindowInputEvent(1, server_id(top_level.get()), + window_tree_client()->OnWindowInputEvent(1, server_id(top_level.get()), 0, std::move(pointer_event_down), true); // Delegate sensed the event. @@ -1575,4 +1588,38 @@ EXPECT_EQ(gfx::Rect(2, 4, 6, 8), top_level->GetHost()->GetBoundsInPixels()); } +TEST_F(WindowTreeClientClientTestHighDPI, PointerEventsInDips) { + display::Screen* screen = display::Screen::GetScreen(); + const display::Display primary_display = screen->GetPrimaryDisplay(); + ASSERT_EQ(2.0f, primary_display.device_scale_factor()); + + std::unique_ptr<Window> top_level(base::MakeUnique<Window>(nullptr)); + top_level->SetType(ui::wm::WINDOW_TYPE_NORMAL); + top_level->Init(ui::LAYER_NOT_DRAWN); + top_level->SetBounds(gfx::Rect(0, 0, 100, 100)); + top_level->Show(); + + // Start a pointer watcher for all events excluding move events. + window_tree_client_impl()->StartPointerWatcher(false /* want_moves */); + + // Simulate the server sending an observed event. + const gfx::Point location_pixels(10, 12); + const gfx::Point root_location_pixels(14, 16); + std::unique_ptr<ui::PointerEvent> pointer_event_down(new ui::PointerEvent( + ui::ET_POINTER_DOWN, location_pixels, root_location_pixels, + ui::EF_CONTROL_DOWN, 1, 0, + ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH), + base::TimeTicks())); + window_tree_client()->OnPointerEventObserved(std::move(pointer_event_down), + 0u, primary_display.id()); + + // Delegate received the event in Dips. + const ui::PointerEvent* last_event = last_event_observed(); + ASSERT_TRUE(last_event); + EXPECT_EQ(gfx::ConvertPointToDIP(2.0f, location_pixels), + last_event->location()); + EXPECT_EQ(gfx::ConvertPointToDIP(2.0f, root_location_pixels), + last_event->root_location()); +} + } // namespace aura
diff --git a/ui/aura/test/mus/window_tree_client_private.cc b/ui/aura/test/mus/window_tree_client_private.cc index 92c4212..c1255bf 100644 --- a/ui/aura/test/mus/window_tree_client_private.cc +++ b/ui/aura/test/mus/window_tree_client_private.cc
@@ -56,9 +56,10 @@ std::unique_ptr<ui::Event> event) { const uint32_t event_id = 0u; const uint32_t observer_id = 0u; - tree_client_impl_->OnWindowInputEvent(event_id, - WindowPortMus::Get(window)->server_id(), - std::move(event), observer_id); + const int64_t display_id = 0; + tree_client_impl_->OnWindowInputEvent( + event_id, WindowPortMus::Get(window)->server_id(), display_id, + std::move(event), observer_id); } void WindowTreeClientPrivate::CallOnCaptureChanged(Window* new_capture,
diff --git a/ui/views/focus/focus_manager.cc b/ui/views/focus/focus_manager.cc index f429dbdc..adb1612 100644 --- a/ui/views/focus/focus_manager.cc +++ b/ui/views/focus/focus_manager.cc
@@ -9,7 +9,6 @@ #include "base/auto_reset.h" #include "base/logging.h" -#include "build/build_config.h" #include "ui/base/accelerators/accelerator.h" #include "ui/base/ime/input_method.h" #include "ui/base/ime/text_input_client.h" @@ -28,18 +27,13 @@ bool FocusManager::arrow_key_traversal_enabled_ = false; -FocusManager::FocusManager(Widget* widget, FocusManagerDelegate* delegate) +FocusManager::FocusManager(Widget* widget, + std::unique_ptr<FocusManagerDelegate> delegate) : widget_(widget), - delegate_(delegate), - focused_view_(NULL), - accelerator_manager_(new ui::AcceleratorManager), - shortcut_handling_suspended_(false), - focus_change_reason_(kReasonDirectFocusChange), - is_changing_focus_(false), - keyboard_accessible_(false) { + delegate_(std::move(delegate)), + stored_focused_view_storage_id_( + ViewStorage::GetInstance()->CreateStorageID()) { DCHECK(widget_); - stored_focused_view_storage_id_ = - ViewStorage::GetInstance()->CreateStorageID(); } FocusManager::~FocusManager() { @@ -59,7 +53,7 @@ if (event.type() == ui::ET_KEY_PRESSED) { // If the focused view wants to process the key event as is, let it be. if (focused_view_ && focused_view_->SkipDefaultKeyEventProcessing(event) && - !accelerator_manager_->HasPriorityHandler(accelerator)) + !accelerator_manager_.HasPriorityHandler(accelerator)) return true; // Intercept Tab related messages for focus traversal. @@ -108,16 +102,11 @@ return true; } -void FocusManager::ValidateFocusedView() { - if (focused_view_ && !ContainsView(focused_view_)) - ClearFocus(); -} - // Tests whether a view is valid, whether it still belongs to the window // hierarchy of the FocusManager. bool FocusManager::ContainsView(View* view) { Widget* widget = view->GetWidget(); - return widget ? widget->GetFocusManager() == this : false; + return widget && widget->GetFocusManager() == this; } void FocusManager::AdvanceFocus(bool reverse) { @@ -204,10 +193,10 @@ Widget* starting_widget, bool reverse, bool dont_loop) { - FocusTraversable* focus_traversable = NULL; + DCHECK(!focused_view_ || ContainsView(focused_view_)) << " focus_view=" + << focused_view_; - // Let's revalidate the focused view. - ValidateFocusedView(); + FocusTraversable* focus_traversable = NULL; View* starting_view = NULL; if (original_starting_view) { @@ -328,7 +317,6 @@ } #endif - base::AutoReset<bool> auto_changing_focus(&is_changing_focus_, true); // Update the reason for the focus change (since this is checked by // some listeners), then notify all listeners. focus_change_reason_ = reason; @@ -497,20 +485,20 @@ const ui::Accelerator& accelerator, ui::AcceleratorManager::HandlerPriority priority, ui::AcceleratorTarget* target) { - accelerator_manager_->Register({accelerator}, priority, target); + accelerator_manager_.Register({accelerator}, priority, target); } void FocusManager::UnregisterAccelerator(const ui::Accelerator& accelerator, ui::AcceleratorTarget* target) { - accelerator_manager_->Unregister(accelerator, target); + accelerator_manager_.Unregister(accelerator, target); } void FocusManager::UnregisterAccelerators(ui::AcceleratorTarget* target) { - accelerator_manager_->UnregisterAll(target); + accelerator_manager_.UnregisterAll(target); } bool FocusManager::ProcessAccelerator(const ui::Accelerator& accelerator) { - if (accelerator_manager_->Process(accelerator)) + if (accelerator_manager_.Process(accelerator)) return true; if (delegate_.get()) return delegate_->ProcessAccelerator(accelerator); @@ -519,7 +507,7 @@ bool FocusManager::HasPriorityHandler( const ui::Accelerator& accelerator) const { - return accelerator_manager_->HasPriorityHandler(accelerator); + return accelerator_manager_.HasPriorityHandler(accelerator); } // static
diff --git a/ui/views/focus/focus_manager.h b/ui/views/focus/focus_manager.h index 9b24220..02fe0ab 100644 --- a/ui/views/focus/focus_manager.h +++ b/ui/views/focus/focus_manager.h
@@ -5,15 +5,11 @@ #ifndef UI_VIEWS_FOCUS_FOCUS_MANAGER_H_ #define UI_VIEWS_FOCUS_FOCUS_MANAGER_H_ -#include <list> -#include <map> #include <memory> #include "base/macros.h" #include "base/observer_list.h" -#include "ui/base/accelerators/accelerator.h" #include "ui/base/accelerators/accelerator_manager.h" -#include "ui/gfx/native_widget_types.h" #include "ui/views/views_export.h" // FocusManager handles focus traversal, stores and restores focused views, and @@ -75,7 +71,7 @@ // AccessibleToolbarView is FocusTraversable. namespace ui { -class AcceleratorManager; +class Accelerator; class AcceleratorTarget; class KeyEvent; } @@ -149,7 +145,7 @@ kNoWrap }; - FocusManager(Widget* widget, FocusManagerDelegate* delegate); + FocusManager(Widget* widget, std::unique_ptr<FocusManagerDelegate> delegate); virtual ~FocusManager(); // Processes the passed key event for accelerators and keyboard traversal. @@ -189,10 +185,6 @@ // is no view available to advance focus to, focus will be cleared. void AdvanceFocusIfNecessary(); - // Validates the focused view, clearing it if the window it belongs too is not - // attached to the window hierarchy anymore. - void ValidateFocusedView(); - // Stores the focused view. Used when the widget loses activation. // |clear_native_focus| indicates whether this should invoke ClearFocus(). // Typically |true| should be passed in. @@ -216,9 +208,6 @@ // Clears the stored focused view. void ClearStoredFocusedView(); - // Returns true if in the process of changing the focused view. - bool is_changing_focus() const { return is_changing_focus_; } - // Disable shortcut handling. void set_shortcut_handling_suspended(bool suspended) { shortcut_handling_suspended_ = suspended; @@ -353,35 +342,31 @@ std::unique_ptr<FocusManagerDelegate> delegate_; // The view that currently is focused. - View* focused_view_; + View* focused_view_ = nullptr; // The AcceleratorManager this FocusManager is associated with. - std::unique_ptr<ui::AcceleratorManager> accelerator_manager_; + ui::AcceleratorManager accelerator_manager_; // Keeps track of whether shortcut handling is currently suspended. - bool shortcut_handling_suspended_; + bool shortcut_handling_suspended_ = false; // The storage id used in the ViewStorage to store/restore the view that last // had focus. - int stored_focused_view_storage_id_; + const int stored_focused_view_storage_id_; // The reason why the focus most recently changed. - FocusChangeReason focus_change_reason_; + FocusChangeReason focus_change_reason_ = kReasonDirectFocusChange; // The list of registered FocusChange listeners. base::ObserverList<FocusChangeListener, true> focus_change_listeners_; - // See description above getter. - bool is_changing_focus_; - // This is true if full keyboard accessibility is needed. This causes // IsAccessibilityFocusable() to be checked rather than IsFocusable(). This // can be set depending on platform constraints. FocusSearch uses this in // addition to its own accessibility mode, which handles accessibility at the // FocusTraversable level. Currently only used on Mac, when Full Keyboard // access is enabled. - // Default value is false. - bool keyboard_accessible_; + bool keyboard_accessible_ = false; DISALLOW_COPY_AND_ASSIGN(FocusManager); };
diff --git a/ui/views/focus/focus_manager_factory.cc b/ui/views/focus/focus_manager_factory.cc index 14956a65..a5393cf 100644 --- a/ui/views/focus/focus_manager_factory.cc +++ b/ui/views/focus/focus_manager_factory.cc
@@ -4,9 +4,8 @@ #include "ui/views/focus/focus_manager_factory.h" -#include "base/compiler_specific.h" -#include "base/macros.h" #include "ui/views/focus/focus_manager.h" +#include "ui/views/focus/focus_manager_delegate.h" namespace views { @@ -20,14 +19,14 @@ protected: FocusManager* CreateFocusManager(Widget* widget, bool desktop_widget) override { - return new FocusManager(widget, NULL /* delegate */); + return new FocusManager(widget, nullptr /* delegate */); } private: DISALLOW_COPY_AND_ASSIGN(DefaultFocusManagerFactory); }; -FocusManagerFactory* focus_manager_factory = NULL; +FocusManagerFactory* focus_manager_factory = nullptr; } // namespace
diff --git a/ui/views/focus/focus_manager_unittest.cc b/ui/views/focus/focus_manager_unittest.cc index 26f1f658..bafea1e 100644 --- a/ui/views/focus/focus_manager_unittest.cc +++ b/ui/views/focus/focus_manager_unittest.cc
@@ -15,6 +15,7 @@ #include "ui/base/accelerators/accelerator.h" #include "ui/events/keycodes/keyboard_codes.h" #include "ui/views/accessible_pane_view.h" +#include "ui/views/focus/focus_manager_delegate.h" #include "ui/views/focus/focus_manager_factory.h" #include "ui/views/focus/widget_focus_manager.h" #include "ui/views/test/focus_manager_test.h"