<testsuites name="Mocha Tests" time="3307.240" tests="272" failures="142">
  <testsuite name="Root Suite" timestamp="2025-05-02T12:28:40" tests="0" time="0.000" failures="0">
  </testsuite>
  <testsuite name="realtime/objects" timestamp="2025-05-02T12:28:40" tests="1" file="/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js" time="0.000" failures="0">
    <testcase name="realtime/objects can attach to channel with Objects modes" time="0.346" classname="can attach to channel with Objects modes">
    </testcase>
  </testsuite>
  <testsuite name="Realtime without Objects plugin" timestamp="2025-05-02T12:28:46" tests="3" file="/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js" time="0.812" failures="0">
    <testcase name="realtime/objects Realtime without Objects plugin throws an error when attempting to access the channel&apos;s `objects` property" time="0.002" classname="throws an error when attempting to access the channel&apos;s `objects` property">
    </testcase>
    <testcase name="realtime/objects Realtime without Objects plugin doesn&apos;t break when it receives an OBJECT ProtocolMessage" time="0.381" classname="doesn&apos;t break when it receives an OBJECT ProtocolMessage">
    </testcase>
    <testcase name="realtime/objects Realtime without Objects plugin doesn&apos;t break when it receives an OBJECT_SYNC ProtocolMessage" time="0.427" classname="doesn&apos;t break when it receives an OBJECT_SYNC ProtocolMessage">
    </testcase>
  </testsuite>
  <testsuite name="Realtime with Objects plugin" timestamp="2025-05-02T12:28:47" tests="249" file="/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js" time="0.000" failures="134">
    <testcase name="realtime/objects Realtime with Objects plugin returns Objects class instance when accessing channel&apos;s `objects` property" time="0.002" classname="returns Objects class instance when accessing channel&apos;s `objects` property">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin getRoot() returns LiveMap instance" time="0.535" classname="getRoot() returns LiveMap instance">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin getRoot() returns LiveObject with id &quot;root&quot;" time="0.144" classname="getRoot() returns LiveObject with id &quot;root&quot;">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin getRoot() returns empty root when no objects exist on a channel" time="0.142" classname="getRoot() returns empty root when no objects exist on a channel">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin getRoot() waits for initial OBJECT_SYNC to be completed before resolving" time="0.153" classname="getRoot() waits for initial OBJECT_SYNC to be completed before resolving">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin getRoot() resolves immediately when OBJECT_SYNC sequence is completed" time="0.152" classname="getRoot() resolves immediately when OBJECT_SYNC sequence is completed">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin getRoot() waits for OBJECT_SYNC with empty cursor before resolving" time="0.137" classname="getRoot() waits for OBJECT_SYNC with empty cursor before resolving">
      <failure message="Invalid object data for MAP_SET op on objectId=root on key=key" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=root on key=key
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at /home/runner/work/ably-js/ably-js/src/plugins/objects/livemap.ts:609:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (src/plugins/objects/livemap.ts:600:55)
    at _LiveMap.overrideWithObjectState (src/plugins/objects/livemap.ts:505:14)
    at Objects._applySync (src/plugins/objects/objects.ts:382:39)
    at Objects._endSync (src/plugins/objects/objects.ts:339:10)
    at Objects.handleObjectSyncMessages (src/plugins/objects/objects.ts:228:12)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:634:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:398:11
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at Context.<anonymous> (test/realtime/objects.test.js:369:9)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin builds object tree from OBJECT_SYNC sequence on channel attachment with web_socket binary protocol" time="60.004" classname="builds object tree from OBJECT_SYNC sequence on channel attachment with web_socket binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin builds object tree from OBJECT_SYNC sequence on channel attachment with web_socket text protocol" time="60.005" classname="builds object tree from OBJECT_SYNC sequence on channel attachment with web_socket text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin builds object tree from OBJECT_SYNC sequence on channel attachment with comet binary protocol" time="60.004" classname="builds object tree from OBJECT_SYNC sequence on channel attachment with comet binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin builds object tree from OBJECT_SYNC sequence on channel attachment with comet text protocol" time="60.004" classname="builds object tree from OBJECT_SYNC sequence on channel attachment with comet text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin builds object tree from OBJECT_SYNC sequence on channel attachment with binary protocol" time="60.000" classname="builds object tree from OBJECT_SYNC sequence on channel attachment with binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin builds object tree from OBJECT_SYNC sequence on channel attachment with text protocol" time="60.000" classname="builds object tree from OBJECT_SYNC sequence on channel attachment with text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter is initialized with initial value from OBJECT_SYNC sequence with web_socket binary protocol" time="60.000" classname="LiveCounter is initialized with initial value from OBJECT_SYNC sequence with web_socket binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter is initialized with initial value from OBJECT_SYNC sequence with web_socket text protocol" time="59.999" classname="LiveCounter is initialized with initial value from OBJECT_SYNC sequence with web_socket text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter is initialized with initial value from OBJECT_SYNC sequence with comet binary protocol" time="60.000" classname="LiveCounter is initialized with initial value from OBJECT_SYNC sequence with comet binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter is initialized with initial value from OBJECT_SYNC sequence with comet text protocol" time="60.000" classname="LiveCounter is initialized with initial value from OBJECT_SYNC sequence with comet text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter is initialized with initial value from OBJECT_SYNC sequence with binary protocol" time="60.000" classname="LiveCounter is initialized with initial value from OBJECT_SYNC sequence with binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter is initialized with initial value from OBJECT_SYNC sequence with text protocol" time="59.999" classname="LiveCounter is initialized with initial value from OBJECT_SYNC sequence with text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap is initialized with initial value from OBJECT_SYNC sequence with web_socket binary protocol" time="59.999" classname="LiveMap is initialized with initial value from OBJECT_SYNC sequence with web_socket binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap is initialized with initial value from OBJECT_SYNC sequence with web_socket text protocol" time="60.000" classname="LiveMap is initialized with initial value from OBJECT_SYNC sequence with web_socket text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap is initialized with initial value from OBJECT_SYNC sequence with comet binary protocol" time="59.999" classname="LiveMap is initialized with initial value from OBJECT_SYNC sequence with comet binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap is initialized with initial value from OBJECT_SYNC sequence with comet text protocol" time="59.999" classname="LiveMap is initialized with initial value from OBJECT_SYNC sequence with comet text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap is initialized with initial value from OBJECT_SYNC sequence with binary protocol" time="59.999" classname="LiveMap is initialized with initial value from OBJECT_SYNC sequence with binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap is initialized with initial value from OBJECT_SYNC sequence with text protocol" time="60.000" classname="LiveMap is initialized with initial value from OBJECT_SYNC sequence with text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap can reference the same object in their keys with web_socket binary protocol" time="59.999" classname="LiveMap can reference the same object in their keys with web_socket binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap can reference the same object in their keys with web_socket text protocol" time="59.999" classname="LiveMap can reference the same object in their keys with web_socket text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap can reference the same object in their keys with comet binary protocol" time="59.999" classname="LiveMap can reference the same object in their keys with comet binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap can reference the same object in their keys with comet text protocol" time="60.001" classname="LiveMap can reference the same object in their keys with comet text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap can reference the same object in their keys with binary protocol" time="59.999" classname="LiveMap can reference the same object in their keys with binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap can reference the same object in their keys with text protocol" time="60.000" classname="LiveMap can reference the same object in their keys with text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property creates tombstoned object" time="0.822" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property creates tombstoned object">
      <failure message="Invalid object data for MAP_SET op on objectId=root on key=foo" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=root on key=foo
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at /home/runner/work/ably-js/ably-js/src/plugins/objects/livemap.ts:609:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (src/plugins/objects/livemap.ts:600:55)
    at _LiveMap.overrideWithObjectState (src/plugins/objects/livemap.ts:505:14)
    at Objects._applySync (src/plugins/objects/objects.ts:382:39)
    at Objects._endSync (src/plugins/objects/objects.ts:339:10)
    at Objects.handleObjectSyncMessages (src/plugins/objects/objects.ts:228:12)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:634:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)
    at Object.action (test/realtime/objects.test.js:680:13)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:57:11)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with web_socket binary protocol" time="1.143" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with web_socket binary protocol">
      <failure message="Invalid object data for MAP_SET op on objectId=root on key=foo" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=root on key=foo
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at /home/runner/work/ably-js/ably-js/src/plugins/objects/livemap.ts:609:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (src/plugins/objects/livemap.ts:600:55)
    at _LiveMap.overrideWithObjectState (src/plugins/objects/livemap.ts:505:14)
    at Objects._applySync (src/plugins/objects/objects.ts:382:39)
    at Objects._endSync (src/plugins/objects/objects.ts:339:10)
    at Objects.handleObjectSyncMessages (src/plugins/objects/objects.ts:228:12)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:634:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)
    at Object.action (test/realtime/objects.test.js:746:13)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with web_socket text protocol" time="0.914" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with web_socket text protocol">
      <failure message="Invalid object data for MAP_SET op on objectId=root on key=foo" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=root on key=foo
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at /home/runner/work/ably-js/ably-js/src/plugins/objects/livemap.ts:609:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (src/plugins/objects/livemap.ts:600:55)
    at _LiveMap.overrideWithObjectState (src/plugins/objects/livemap.ts:505:14)
    at Objects._applySync (src/plugins/objects/objects.ts:382:39)
    at Objects._endSync (src/plugins/objects/objects.ts:339:10)
    at Objects.handleObjectSyncMessages (src/plugins/objects/objects.ts:228:12)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:634:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)
    at Object.action (test/realtime/objects.test.js:746:13)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with comet binary protocol" time="0.605" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with comet binary protocol">
      <failure message="Invalid object data for MAP_SET op on objectId=root on key=foo" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=root on key=foo
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at /home/runner/work/ably-js/ably-js/src/plugins/objects/livemap.ts:609:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (src/plugins/objects/livemap.ts:600:55)
    at _LiveMap.overrideWithObjectState (src/plugins/objects/livemap.ts:505:14)
    at Objects._applySync (src/plugins/objects/objects.ts:382:39)
    at Objects._endSync (src/plugins/objects/objects.ts:339:10)
    at Objects.handleObjectSyncMessages (src/plugins/objects/objects.ts:228:12)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:634:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)
    at Object.action (test/realtime/objects.test.js:746:13)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with comet text protocol" time="0.372" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with comet text protocol">
      <failure message="Invalid object data for MAP_SET op on objectId=root on key=foo" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=root on key=foo
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at /home/runner/work/ably-js/ably-js/src/plugins/objects/livemap.ts:609:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (src/plugins/objects/livemap.ts:600:55)
    at _LiveMap.overrideWithObjectState (src/plugins/objects/livemap.ts:505:14)
    at Objects._applySync (src/plugins/objects/objects.ts:382:39)
    at Objects._endSync (src/plugins/objects/objects.ts:339:10)
    at Objects.handleObjectSyncMessages (src/plugins/objects/objects.ts:228:12)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:634:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)
    at Object.action (test/realtime/objects.test.js:746:13)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with binary protocol" time="0.346" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with binary protocol">
      <failure message="Invalid object data for MAP_SET op on objectId=root on key=foo" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=root on key=foo
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at /home/runner/work/ably-js/ably-js/src/plugins/objects/livemap.ts:609:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (src/plugins/objects/livemap.ts:600:55)
    at _LiveMap.overrideWithObjectState (src/plugins/objects/livemap.ts:505:14)
    at Objects._applySync (src/plugins/objects/objects.ts:382:39)
    at Objects._endSync (src/plugins/objects/objects.ts:339:10)
    at Objects.handleObjectSyncMessages (src/plugins/objects/objects.ts:228:12)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:634:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)
    at Object.action (test/realtime/objects.test.js:746:13)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with text protocol" time="0.964" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with text protocol">
      <failure message="Invalid object data for MAP_SET op on objectId=root on key=foo" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=root on key=foo
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at /home/runner/work/ably-js/ably-js/src/plugins/objects/livemap.ts:609:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (src/plugins/objects/livemap.ts:600:55)
    at _LiveMap.overrideWithObjectState (src/plugins/objects/livemap.ts:505:14)
    at Objects._applySync (src/plugins/objects/objects.ts:382:39)
    at Objects._endSync (src/plugins/objects/objects.ts:339:10)
    at Objects.handleObjectSyncMessages (src/plugins/objects/objects.ts:228:12)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:634:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)
    at Object.action (test/realtime/objects.test.js:746:13)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with web_socket binary protocol" time="1.570" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with web_socket text protocol" time="0.854" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with comet binary protocol" time="0.737" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with comet text protocol" time="0.319" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with binary protocol" time="0.948" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with text protocol" time="0.449" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with primitives object operation messages with web_socket binary protocol" time="0.536" classname="can apply MAP_CREATE with primitives object operation messages with web_socket binary protocol">
      <failure message="Check map &quot;valuesMap&quot; has correct number of keys: expected +0 to equal 10" type="AssertionError"><![CDATA[AssertionError: Check map "valuesMap" has correct number of keys: expected +0 to equal 10
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:876:40
    at Array.forEach (<anonymous>)
    at Object.action (test/realtime/objects.test.js:867:35)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +10
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with primitives object operation messages with web_socket text protocol" time="0.926" classname="can apply MAP_CREATE with primitives object operation messages with web_socket text protocol">
      <failure message="Check map &quot;valuesMap&quot; has correct number of keys: expected +0 to equal 10" type="AssertionError"><![CDATA[AssertionError: Check map "valuesMap" has correct number of keys: expected +0 to equal 10
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:876:40
    at Array.forEach (<anonymous>)
    at Object.action (test/realtime/objects.test.js:867:35)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +10
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with primitives object operation messages with comet binary protocol" time="0.381" classname="can apply MAP_CREATE with primitives object operation messages with comet binary protocol">
      <failure message="Check map &quot;valuesMap&quot; has correct number of keys: expected +0 to equal 10" type="AssertionError"><![CDATA[AssertionError: Check map "valuesMap" has correct number of keys: expected +0 to equal 10
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:876:40
    at Array.forEach (<anonymous>)
    at Object.action (test/realtime/objects.test.js:867:35)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +10
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with primitives object operation messages with comet text protocol" time="1.451" classname="can apply MAP_CREATE with primitives object operation messages with comet text protocol">
      <failure message="Check map &quot;valuesMap&quot; has correct number of keys: expected +0 to equal 10" type="AssertionError"><![CDATA[AssertionError: Check map "valuesMap" has correct number of keys: expected +0 to equal 10
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:876:40
    at Array.forEach (<anonymous>)
    at Object.action (test/realtime/objects.test.js:867:35)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +10
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with primitives object operation messages with binary protocol" time="0.522" classname="can apply MAP_CREATE with primitives object operation messages with binary protocol">
      <failure message="Check map &quot;valuesMap&quot; has correct number of keys: expected +0 to equal 10" type="AssertionError"><![CDATA[AssertionError: Check map "valuesMap" has correct number of keys: expected +0 to equal 10
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:876:40
    at Array.forEach (<anonymous>)
    at Object.action (test/realtime/objects.test.js:867:35)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +10
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with primitives object operation messages with text protocol" time="0.843" classname="can apply MAP_CREATE with primitives object operation messages with text protocol">
      <failure message="Check map &quot;valuesMap&quot; has correct number of keys: expected +0 to equal 10" type="AssertionError"><![CDATA[AssertionError: Check map "valuesMap" has correct number of keys: expected +0 to equal 10
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:876:40
    at Array.forEach (<anonymous>)
    at Object.action (test/realtime/objects.test.js:867:35)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +10
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with object ids object operation messages with web_socket binary protocol" time="1.309" classname="can apply MAP_CREATE with object ids object operation messages with web_socket binary protocol">
      <failure message="Check map at &quot;mapReference&quot; key has correct number of keys: expected +0 to equal 1" type="AssertionError"><![CDATA[AssertionError: Check map at "mapReference" key has correct number of keys: expected +0 to equal 1
    at Object.action (test/realtime/objects.test.js:968:45)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +1
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with object ids object operation messages with web_socket text protocol" time="1.000" classname="can apply MAP_CREATE with object ids object operation messages with web_socket text protocol">
      <failure message="Check map at &quot;mapReference&quot; key has correct number of keys: expected +0 to equal 1" type="AssertionError"><![CDATA[AssertionError: Check map at "mapReference" key has correct number of keys: expected +0 to equal 1
    at Object.action (test/realtime/objects.test.js:968:45)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +1
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with object ids object operation messages with comet binary protocol" time="0.933" classname="can apply MAP_CREATE with object ids object operation messages with comet binary protocol">
      <failure message="Check map at &quot;mapReference&quot; key has correct number of keys: expected +0 to equal 1" type="AssertionError"><![CDATA[AssertionError: Check map at "mapReference" key has correct number of keys: expected +0 to equal 1
    at Object.action (test/realtime/objects.test.js:968:45)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +1
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with object ids object operation messages with comet text protocol" time="0.508" classname="can apply MAP_CREATE with object ids object operation messages with comet text protocol">
      <failure message="Check map at &quot;mapReference&quot; key has correct number of keys: expected +0 to equal 1" type="AssertionError"><![CDATA[AssertionError: Check map at "mapReference" key has correct number of keys: expected +0 to equal 1
    at Object.action (test/realtime/objects.test.js:968:45)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +1
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with object ids object operation messages with binary protocol" time="0.989" classname="can apply MAP_CREATE with object ids object operation messages with binary protocol">
      <failure message="Check map at &quot;mapReference&quot; key has correct number of keys: expected +0 to equal 1" type="AssertionError"><![CDATA[AssertionError: Check map at "mapReference" key has correct number of keys: expected +0 to equal 1
    at Object.action (test/realtime/objects.test.js:968:45)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +1
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with object ids object operation messages with text protocol" time="1.051" classname="can apply MAP_CREATE with object ids object operation messages with text protocol">
      <failure message="Check map at &quot;mapReference&quot; key has correct number of keys: expected +0 to equal 1" type="AssertionError"><![CDATA[AssertionError: Check map at "mapReference" key has correct number of keys: expected +0 to equal 1
    at Object.action (test/realtime/objects.test.js:968:45)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +1
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin MAP_CREATE object operation messages are applied based on the site timeserials vector of the object" time="0.226" classname="MAP_CREATE object operation messages are applied based on the site timeserials vector of the object">
      <failure message="Invalid object data for MAP_SET op on objectId=map:39704101305765405@1746190389575 on key=foo" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:39704101305765405@1746190389575 on key=foo
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:411:25)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects.handleObjectMessages (src/plugins/objects/objects.ts:245:10)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:632:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectOperationMessageOnChannel (test/common/modules/objects_helper.js:271:7)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:993:17
    at async Promise.all (index 0)
    at Object.action (test/realtime/objects.test.js:990:13)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:57:11)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with primitives object operation messages with web_socket binary protocol" time="60.002" classname="can apply MAP_SET with primitives object operation messages with web_socket binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with primitives object operation messages with web_socket text protocol" time="60.006" classname="can apply MAP_SET with primitives object operation messages with web_socket text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with primitives object operation messages with comet binary protocol" time="60.005" classname="can apply MAP_SET with primitives object operation messages with comet binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with primitives object operation messages with comet text protocol" time="60.005" classname="can apply MAP_SET with primitives object operation messages with comet text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with primitives object operation messages with binary protocol" time="60.000" classname="can apply MAP_SET with primitives object operation messages with binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with primitives object operation messages with text protocol" time="59.999" classname="can apply MAP_SET with primitives object operation messages with text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with object ids object operation messages with web_socket binary protocol" time="0.628" classname="can apply MAP_SET with object ids object operation messages with web_socket binary protocol">
      <failure message="Check map at &quot;keyToMap&quot; key in root has correct number of keys: expected +0 to equal 1" type="AssertionError"><![CDATA[AssertionError: Check map at "keyToMap" key in root has correct number of keys: expected +0 to equal 1
    at Object.action (test/realtime/objects.test.js:1157:35)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +1
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with object ids object operation messages with web_socket text protocol" time="1.015" classname="can apply MAP_SET with object ids object operation messages with web_socket text protocol">
      <failure message="Check map at &quot;keyToMap&quot; key in root has correct number of keys: expected +0 to equal 1" type="AssertionError"><![CDATA[AssertionError: Check map at "keyToMap" key in root has correct number of keys: expected +0 to equal 1
    at Object.action (test/realtime/objects.test.js:1157:35)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +1
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with object ids object operation messages with comet binary protocol" time="1.264" classname="can apply MAP_SET with object ids object operation messages with comet binary protocol">
      <failure message="Check map at &quot;keyToMap&quot; key in root has correct number of keys: expected +0 to equal 1" type="AssertionError"><![CDATA[AssertionError: Check map at "keyToMap" key in root has correct number of keys: expected +0 to equal 1
    at Object.action (test/realtime/objects.test.js:1157:35)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +1
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with object ids object operation messages with comet text protocol" time="0.914" classname="can apply MAP_SET with object ids object operation messages with comet text protocol">
      <failure message="Check map at &quot;keyToMap&quot; key in root has correct number of keys: expected +0 to equal 1" type="AssertionError"><![CDATA[AssertionError: Check map at "keyToMap" key in root has correct number of keys: expected +0 to equal 1
    at Object.action (test/realtime/objects.test.js:1157:35)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +1
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with object ids object operation messages with binary protocol" time="1.044" classname="can apply MAP_SET with object ids object operation messages with binary protocol">
      <failure message="Check map at &quot;keyToMap&quot; key in root has correct number of keys: expected +0 to equal 1" type="AssertionError"><![CDATA[AssertionError: Check map at "keyToMap" key in root has correct number of keys: expected +0 to equal 1
    at Object.action (test/realtime/objects.test.js:1157:35)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +1
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with object ids object operation messages with text protocol" time="0.974" classname="can apply MAP_SET with object ids object operation messages with text protocol">
      <failure message="Check map at &quot;keyToMap&quot; key in root has correct number of keys: expected +0 to equal 1" type="AssertionError"><![CDATA[AssertionError: Check map at "keyToMap" key in root has correct number of keys: expected +0 to equal 1
    at Object.action (test/realtime/objects.test.js:1157:35)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +1
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin MAP_SET object operation messages are applied based on the site timeserials vector of the object" time="0.974" classname="MAP_SET object operation messages are applied based on the site timeserials vector of the object">
      <failure message="Invalid object data for MAP_SET op on objectId=map:9753807320615315@1746190756444 on key=foo1" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:9753807320615315@1746190756444 on key=foo1
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at /home/runner/work/ably-js/ably-js/src/plugins/objects/livemap.ts:609:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (src/plugins/objects/livemap.ts:600:55)
    at _LiveMap._applyMapCreate (src/plugins/objects/livemap.ts:656:17)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:402:23)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects.handleObjectMessages (src/plugins/objects/objects.ts:245:10)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:632:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectOperationMessageOnChannel (test/common/modules/objects_helper.js:271:7)
    at Object.action (test/realtime/objects.test.js:1173:13)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:57:11)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_REMOVE object operation messages with web_socket binary protocol" time="0.944" classname="can apply MAP_REMOVE object operation messages with web_socket binary protocol">
      <failure message="Check map at &quot;map&quot; key in root has correct number of keys before MAP_REMOVE: expected +0 to equal 2" type="AssertionError"><![CDATA[AssertionError: Check map at "map" key in root has correct number of keys before MAP_REMOVE: expected +0 to equal 2
    at Object.action (test/realtime/objects.test.js:1257:35)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +2
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_REMOVE object operation messages with web_socket text protocol" time="0.319" classname="can apply MAP_REMOVE object operation messages with web_socket text protocol">
      <failure message="Check map at &quot;map&quot; key in root has correct number of keys before MAP_REMOVE: expected +0 to equal 2" type="AssertionError"><![CDATA[AssertionError: Check map at "map" key in root has correct number of keys before MAP_REMOVE: expected +0 to equal 2
    at Object.action (test/realtime/objects.test.js:1257:35)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +2
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_REMOVE object operation messages with comet binary protocol" time="0.914" classname="can apply MAP_REMOVE object operation messages with comet binary protocol">
      <failure message="Check map at &quot;map&quot; key in root has correct number of keys before MAP_REMOVE: expected +0 to equal 2" type="AssertionError"><![CDATA[AssertionError: Check map at "map" key in root has correct number of keys before MAP_REMOVE: expected +0 to equal 2
    at Object.action (test/realtime/objects.test.js:1257:35)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +2
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_REMOVE object operation messages with comet text protocol" time="0.391" classname="can apply MAP_REMOVE object operation messages with comet text protocol">
      <failure message="Check map at &quot;map&quot; key in root has correct number of keys before MAP_REMOVE: expected +0 to equal 2" type="AssertionError"><![CDATA[AssertionError: Check map at "map" key in root has correct number of keys before MAP_REMOVE: expected +0 to equal 2
    at Object.action (test/realtime/objects.test.js:1257:35)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +2
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_REMOVE object operation messages with binary protocol" time="0.477" classname="can apply MAP_REMOVE object operation messages with binary protocol">
      <failure message="Check map at &quot;map&quot; key in root has correct number of keys before MAP_REMOVE: expected +0 to equal 2" type="AssertionError"><![CDATA[AssertionError: Check map at "map" key in root has correct number of keys before MAP_REMOVE: expected +0 to equal 2
    at Object.action (test/realtime/objects.test.js:1257:35)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +2
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_REMOVE object operation messages with text protocol" time="0.441" classname="can apply MAP_REMOVE object operation messages with text protocol">
      <failure message="Check map at &quot;map&quot; key in root has correct number of keys before MAP_REMOVE: expected +0 to equal 2" type="AssertionError"><![CDATA[AssertionError: Check map at "map" key in root has correct number of keys before MAP_REMOVE: expected +0 to equal 2
    at Object.action (test/realtime/objects.test.js:1257:35)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +2
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin MAP_REMOVE object operation messages are applied based on the site timeserials vector of the object" time="0.759" classname="MAP_REMOVE object operation messages are applied based on the site timeserials vector of the object">
      <failure message="Invalid object data for MAP_SET op on objectId=map:944669020344967@1746190760702 on key=foo1" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:944669020344967@1746190760702 on key=foo1
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at /home/runner/work/ably-js/ably-js/src/plugins/objects/livemap.ts:609:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (src/plugins/objects/livemap.ts:600:55)
    at _LiveMap._applyMapCreate (src/plugins/objects/livemap.ts:656:17)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:402:23)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects.handleObjectMessages (src/plugins/objects/objects.ts:245:10)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:632:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectOperationMessageOnChannel (test/common/modules/objects_helper.js:271:7)
    at Object.action (test/realtime/objects.test.js:1305:13)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:57:11)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_CREATE object operation messages with web_socket binary protocol" time="0.926" classname="can apply COUNTER_CREATE object operation messages with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_CREATE object operation messages with web_socket text protocol" time="0.379" classname="can apply COUNTER_CREATE object operation messages with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_CREATE object operation messages with comet binary protocol" time="0.298" classname="can apply COUNTER_CREATE object operation messages with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_CREATE object operation messages with comet text protocol" time="0.341" classname="can apply COUNTER_CREATE object operation messages with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_CREATE object operation messages with binary protocol" time="0.508" classname="can apply COUNTER_CREATE object operation messages with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_CREATE object operation messages with text protocol" time="0.468" classname="can apply COUNTER_CREATE object operation messages with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin COUNTER_CREATE object operation messages are applied based on the site timeserials vector of the object" time="0.361" classname="COUNTER_CREATE object operation messages are applied based on the site timeserials vector of the object">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_INC object operation messages with web_socket binary protocol" time="1.448" classname="can apply COUNTER_INC object operation messages with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_INC object operation messages with web_socket text protocol" time="1.088" classname="can apply COUNTER_INC object operation messages with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_INC object operation messages with comet binary protocol" time="1.374" classname="can apply COUNTER_INC object operation messages with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_INC object operation messages with comet text protocol" time="0.813" classname="can apply COUNTER_INC object operation messages with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_INC object operation messages with binary protocol" time="1.436" classname="can apply COUNTER_INC object operation messages with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_INC object operation messages with text protocol" time="1.382" classname="can apply COUNTER_INC object operation messages with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin COUNTER_INC object operation messages are applied based on the site timeserials vector of the object" time="0.219" classname="COUNTER_INC object operation messages are applied based on the site timeserials vector of the object">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply OBJECT_DELETE object operation messages" time="0.533" classname="can apply OBJECT_DELETE object operation messages">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_DELETE for unknown object id creates zero-value tombstoned object" time="0.748" classname="OBJECT_DELETE for unknown object id creates zero-value tombstoned object">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_DELETE object operation messages are applied based on the site timeserials vector of the object" time="0.813" classname="OBJECT_DELETE object operation messages are applied based on the site timeserials vector of the object">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_DELETE triggers subscription callback with deleted data" time="0.972" classname="OBJECT_DELETE triggers subscription callback with deleted data">
      <failure message="Check map subscription callback is called with an expected update object after OBJECT_DELETE operation: expected { update: {} } to deeply equal { update: { foo: &apos;removed&apos;, …(1) } }" type="AssertionError"><![CDATA[AssertionError: Check map subscription callback is called with an expected update object after OBJECT_DELETE operation: expected { update: {} } to deeply equal { update: { foo: 'removed', …(1) } }
    at Object.<anonymous> (test/realtime/objects.test.js:1781:42)
    at callListener (src/common/lib/util/eventemitter.ts:8:14)
    at /home/runner/work/ably-js/ably-js/src/common/lib/util/eventemitter.ts:220:7
    at Array.forEach (<anonymous>)
    at EventEmitter.emit (src/common/lib/util/eventemitter.ts:219:15)
    at _LiveMap.notifyUpdated (src/plugins/objects/liveobject.ts:154:25)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:437:10)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects.handleObjectMessages (src/plugins/objects/objects.ts:245:10)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:632:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectOperationMessageOnChannel (test/common/modules/objects_helper.js:271:7)
    at Object.action (test/realtime/objects.test.js:1806:13)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:57:11)

      + expected - actual

       {
      -  "update": {}
      +  "update": {
      +    "baz": "removed"
      +    "foo": "removed"
      +  }
       }
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin MAP_SET with reference to a tombstoned object results in undefined value on key" time="0.364" classname="MAP_SET with reference to a tombstoned object results in undefined value on key">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin object operation message on a tombstoned object does not revive it" time="0.507" classname="object operation message on a tombstoned object does not revive it">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin object operation messages are buffered during OBJECT_SYNC sequence" time="0.361" classname="object operation messages are buffered during OBJECT_SYNC sequence">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin buffered object operation messages are applied when OBJECT_SYNC sequence ends" time="0.764" classname="buffered object operation messages are applied when OBJECT_SYNC sequence ends">
      <failure message="Invalid object data for MAP_SET op on objectId=root on key=stringKey" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=root on key=stringKey
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:411:25)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects._endSync (src/plugins/objects/objects.ts:342:10)
    at Objects.handleObjectSyncMessages (src/plugins/objects/objects.ts:228:12)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:634:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)
    at Object.action (test/realtime/objects.test.js:2003:13)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:57:11)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin buffered object operation messages are discarded when new OBJECT_SYNC sequence starts" time="0.784" classname="buffered object operation messages are discarded when new OBJECT_SYNC sequence starts">
      <failure message="Invalid object data for MAP_SET op on objectId=root on key=foo" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=root on key=foo
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:411:25)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects._endSync (src/plugins/objects/objects.ts:342:10)
    at Objects.handleObjectSyncMessages (src/plugins/objects/objects.ts:228:12)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:634:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)
    at Object.action (test/realtime/objects.test.js:2066:13)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:57:11)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin buffered object operation messages are applied based on the site timeserials vector of the object" time="0.372" classname="buffered object operation messages are applied based on the site timeserials vector of the object">
      <failure message="Invalid object data for MAP_SET op on objectId=map:0046102653236799185@1746190777978 on key=foo5" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:0046102653236799185@1746190777978 on key=foo5
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:411:25)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects._endSync (src/plugins/objects/objects.ts:342:10)
    at Objects.handleObjectSyncMessages (src/plugins/objects/objects.ts:228:12)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:634:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)
    at Object.action (test/realtime/objects.test.js:2178:13)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:57:11)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin subsequent object operation messages are applied immediately after OBJECT_SYNC ended and buffers are applied" time="0.797" classname="subsequent object operation messages are applied immediately after OBJECT_SYNC ended and buffers are applied">
      <failure message="Invalid object data for MAP_SET op on objectId=root on key=stringKey" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=root on key=stringKey
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:411:25)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects._endSync (src/plugins/objects/objects.ts:342:10)
    at Objects.handleObjectSyncMessages (src/plugins/objects/objects.ts:228:12)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:634:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)
    at Object.action (test/realtime/objects.test.js:2235:13)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:57:11)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.increment sends COUNTER_INC operation with web_socket binary protocol" time="4.849" classname="LiveCounter.increment sends COUNTER_INC operation with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.increment sends COUNTER_INC operation with web_socket text protocol" time="4.891" classname="LiveCounter.increment sends COUNTER_INC operation with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.increment sends COUNTER_INC operation with comet binary protocol" time="4.417" classname="LiveCounter.increment sends COUNTER_INC operation with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.increment sends COUNTER_INC operation with comet text protocol" time="4.805" classname="LiveCounter.increment sends COUNTER_INC operation with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.increment sends COUNTER_INC operation with binary protocol" time="4.487" classname="LiveCounter.increment sends COUNTER_INC operation with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.increment sends COUNTER_INC operation with text protocol" time="5.034" classname="LiveCounter.increment sends COUNTER_INC operation with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.increment throws on invalid input" time="0.451" classname="LiveCounter.increment throws on invalid input">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.decrement sends COUNTER_INC operation with web_socket binary protocol" time="4.368" classname="LiveCounter.decrement sends COUNTER_INC operation with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.decrement sends COUNTER_INC operation with web_socket text protocol" time="4.889" classname="LiveCounter.decrement sends COUNTER_INC operation with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.decrement sends COUNTER_INC operation with comet binary protocol" time="4.754" classname="LiveCounter.decrement sends COUNTER_INC operation with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.decrement sends COUNTER_INC operation with comet text protocol" time="4.504" classname="LiveCounter.decrement sends COUNTER_INC operation with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.decrement sends COUNTER_INC operation with binary protocol" time="4.674" classname="LiveCounter.decrement sends COUNTER_INC operation with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.decrement sends COUNTER_INC operation with text protocol" time="4.963" classname="LiveCounter.decrement sends COUNTER_INC operation with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.decrement throws on invalid input" time="0.485" classname="LiveCounter.decrement throws on invalid input">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with primitive values with web_socket binary protocol" time="60.005" classname="LiveMap.set sends MAP_SET operation with primitive values with web_socket binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with primitive values with web_socket text protocol" time="60.004" classname="LiveMap.set sends MAP_SET operation with primitive values with web_socket text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with primitive values with comet binary protocol" time="60.005" classname="LiveMap.set sends MAP_SET operation with primitive values with comet binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with primitive values with comet text protocol" time="60.000" classname="LiveMap.set sends MAP_SET operation with primitive values with comet text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with primitive values with binary protocol" time="59.999" classname="LiveMap.set sends MAP_SET operation with primitive values with binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with primitive values with text protocol" time="60.000" classname="LiveMap.set sends MAP_SET operation with primitive values with text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with reference to another LiveObject with web_socket binary protocol" time="1.122" classname="LiveMap.set sends MAP_SET operation with reference to another LiveObject with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with reference to another LiveObject with web_socket text protocol" time="0.865" classname="LiveMap.set sends MAP_SET operation with reference to another LiveObject with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with reference to another LiveObject with comet binary protocol" time="1.396" classname="LiveMap.set sends MAP_SET operation with reference to another LiveObject with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with reference to another LiveObject with comet text protocol" time="0.925" classname="LiveMap.set sends MAP_SET operation with reference to another LiveObject with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with reference to another LiveObject with binary protocol" time="1.112" classname="LiveMap.set sends MAP_SET operation with reference to another LiveObject with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with reference to another LiveObject with text protocol" time="0.908" classname="LiveMap.set sends MAP_SET operation with reference to another LiveObject with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set throws on invalid input" time="0.424" classname="LiveMap.set throws on invalid input">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.remove sends MAP_REMOVE operation with web_socket binary protocol" time="1.330" classname="LiveMap.remove sends MAP_REMOVE operation with web_socket binary protocol">
      <failure message="Check non-removed keys are still present on a root after LiveMap.remove call for another keys: expected undefined to equal 1" type="AssertionError"><![CDATA[AssertionError: Check non-removed keys are still present on a root after LiveMap.remove call for another keys: expected undefined to equal 1
    at Object.action (test/realtime/objects.test.js:2642:18)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.remove sends MAP_REMOVE operation with web_socket text protocol" time="0.963" classname="LiveMap.remove sends MAP_REMOVE operation with web_socket text protocol">
      <failure message="Check non-removed keys are still present on a root after LiveMap.remove call for another keys: expected undefined to equal 1" type="AssertionError"><![CDATA[AssertionError: Check non-removed keys are still present on a root after LiveMap.remove call for another keys: expected undefined to equal 1
    at Object.action (test/realtime/objects.test.js:2642:18)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.remove sends MAP_REMOVE operation with comet binary protocol" time="0.881" classname="LiveMap.remove sends MAP_REMOVE operation with comet binary protocol">
      <failure message="Check non-removed keys are still present on a root after LiveMap.remove call for another keys: expected undefined to equal 1" type="AssertionError"><![CDATA[AssertionError: Check non-removed keys are still present on a root after LiveMap.remove call for another keys: expected undefined to equal 1
    at Object.action (test/realtime/objects.test.js:2642:18)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.remove sends MAP_REMOVE operation with comet text protocol" time="0.891" classname="LiveMap.remove sends MAP_REMOVE operation with comet text protocol">
      <failure message="Check non-removed keys are still present on a root after LiveMap.remove call for another keys: expected undefined to equal 1" type="AssertionError"><![CDATA[AssertionError: Check non-removed keys are still present on a root after LiveMap.remove call for another keys: expected undefined to equal 1
    at Object.action (test/realtime/objects.test.js:2642:18)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.remove sends MAP_REMOVE operation with binary protocol" time="1.461" classname="LiveMap.remove sends MAP_REMOVE operation with binary protocol">
      <failure message="Check non-removed keys are still present on a root after LiveMap.remove call for another keys: expected undefined to equal 1" type="AssertionError"><![CDATA[AssertionError: Check non-removed keys are still present on a root after LiveMap.remove call for another keys: expected undefined to equal 1
    at Object.action (test/realtime/objects.test.js:2642:18)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.remove sends MAP_REMOVE operation with text protocol" time="1.031" classname="LiveMap.remove sends MAP_REMOVE operation with text protocol">
      <failure message="Check non-removed keys are still present on a root after LiveMap.remove call for another keys: expected undefined to equal 1" type="AssertionError"><![CDATA[AssertionError: Check non-removed keys are still present on a root after LiveMap.remove call for another keys: expected undefined to equal 1
    at Object.action (test/realtime/objects.test.js:2642:18)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.remove throws on invalid input" time="0.815" classname="LiveMap.remove throws on invalid input">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter sends COUNTER_CREATE operation with web_socket binary protocol" time="0.978" classname="Objects.createCounter sends COUNTER_CREATE operation with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter sends COUNTER_CREATE operation with web_socket text protocol" time="1.379" classname="Objects.createCounter sends COUNTER_CREATE operation with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter sends COUNTER_CREATE operation with comet binary protocol" time="0.799" classname="Objects.createCounter sends COUNTER_CREATE operation with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter sends COUNTER_CREATE operation with comet text protocol" time="0.709" classname="Objects.createCounter sends COUNTER_CREATE operation with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter sends COUNTER_CREATE operation with binary protocol" time="0.887" classname="Objects.createCounter sends COUNTER_CREATE operation with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter sends COUNTER_CREATE operation with text protocol" time="1.363" classname="Objects.createCounter sends COUNTER_CREATE operation with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter created with Objects.createCounter can be assigned to the object tree with web_socket binary protocol" time="1.358" classname="LiveCounter created with Objects.createCounter can be assigned to the object tree with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter created with Objects.createCounter can be assigned to the object tree with web_socket text protocol" time="1.418" classname="LiveCounter created with Objects.createCounter can be assigned to the object tree with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter created with Objects.createCounter can be assigned to the object tree with comet binary protocol" time="0.853" classname="LiveCounter created with Objects.createCounter can be assigned to the object tree with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter created with Objects.createCounter can be assigned to the object tree with comet text protocol" time="1.353" classname="LiveCounter created with Objects.createCounter can be assigned to the object tree with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter created with Objects.createCounter can be assigned to the object tree with binary protocol" time="0.909" classname="LiveCounter created with Objects.createCounter can be assigned to the object tree with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter created with Objects.createCounter can be assigned to the object tree with text protocol" time="0.915" classname="LiveCounter created with Objects.createCounter can be assigned to the object tree with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter can return LiveCounter with initial value without applying CREATE operation" time="0.379" classname="Objects.createCounter can return LiveCounter with initial value without applying CREATE operation">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with web_socket binary protocol" time="0.831" classname="Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with web_socket text protocol" time="0.246" classname="Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with comet binary protocol" time="0.316" classname="Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with comet text protocol" time="0.768" classname="Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with binary protocol" time="0.266" classname="Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with text protocol" time="0.835" classname="Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin initial value is not double counted for LiveCounter from Objects.createCounter when CREATE op is received" time="0.842" classname="initial value is not double counted for LiveCounter from Objects.createCounter when CREATE op is received">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter throws on invalid input" time="0.241" classname="Objects.createCounter throws on invalid input">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with primitive values with web_socket binary protocol" time="0.412" classname="Objects.createMap sends MAP_CREATE operation with primitive values with web_socket binary protocol">
      <failure message="Check map #2 has correct number of keys: expected +0 to equal 10" type="AssertionError"><![CDATA[AssertionError: Check map #2 has correct number of keys: expected +0 to equal 10
    at Object.action (test/realtime/objects.test.js:2865:37)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +10
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with primitive values with web_socket text protocol" time="1.311" classname="Objects.createMap sends MAP_CREATE operation with primitive values with web_socket text protocol">
      <failure message="Check map #2 has correct number of keys: expected +0 to equal 10" type="AssertionError"><![CDATA[AssertionError: Check map #2 has correct number of keys: expected +0 to equal 10
    at Object.action (test/realtime/objects.test.js:2865:37)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +10
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with primitive values with comet binary protocol" time="1.279" classname="Objects.createMap sends MAP_CREATE operation with primitive values with comet binary protocol">
      <failure message="Check map #2 has correct number of keys: expected +0 to equal 10" type="AssertionError"><![CDATA[AssertionError: Check map #2 has correct number of keys: expected +0 to equal 10
    at Object.action (test/realtime/objects.test.js:2865:37)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +10
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with primitive values with comet text protocol" time="1.306" classname="Objects.createMap sends MAP_CREATE operation with primitive values with comet text protocol">
      <failure message="Check map #2 has correct number of keys: expected +0 to equal 10" type="AssertionError"><![CDATA[AssertionError: Check map #2 has correct number of keys: expected +0 to equal 10
    at Object.action (test/realtime/objects.test.js:2865:37)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +10
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with primitive values with binary protocol" time="1.307" classname="Objects.createMap sends MAP_CREATE operation with primitive values with binary protocol">
      <failure message="Check map #2 has correct number of keys: expected +0 to equal 10" type="AssertionError"><![CDATA[AssertionError: Check map #2 has correct number of keys: expected +0 to equal 10
    at Object.action (test/realtime/objects.test.js:2865:37)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +10
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with primitive values with text protocol" time="1.360" classname="Objects.createMap sends MAP_CREATE operation with primitive values with text protocol">
      <failure message="Check map #2 has correct number of keys: expected +0 to equal 10" type="AssertionError"><![CDATA[AssertionError: Check map #2 has correct number of keys: expected +0 to equal 10
    at Object.action (test/realtime/objects.test.js:2865:37)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +10
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with web_socket binary protocol" time="0.517" classname="Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with web_socket text protocol" time="0.995" classname="Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with comet binary protocol" time="0.357" classname="Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with comet text protocol" time="0.502" classname="Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with binary protocol" time="1.039" classname="Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with text protocol" time="0.442" classname="Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap created with Objects.createMap can be assigned to the object tree with web_socket binary protocol" time="1.448" classname="LiveMap created with Objects.createMap can be assigned to the object tree with web_socket binary protocol">
      <failure message="Check map assigned to the object tree has the expected number of keys: expected 1 to equal 2" type="AssertionError"><![CDATA[AssertionError: Check map assigned to the object tree has the expected number of keys: expected 1 to equal 2
    at Object.action (test/realtime/objects.test.js:2945:47)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -1
      +2
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap created with Objects.createMap can be assigned to the object tree with web_socket text protocol" time="1.852" classname="LiveMap created with Objects.createMap can be assigned to the object tree with web_socket text protocol">
      <failure message="Check map assigned to the object tree has the expected number of keys: expected 1 to equal 2" type="AssertionError"><![CDATA[AssertionError: Check map assigned to the object tree has the expected number of keys: expected 1 to equal 2
    at Object.action (test/realtime/objects.test.js:2945:47)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -1
      +2
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap created with Objects.createMap can be assigned to the object tree with comet binary protocol" time="1.358" classname="LiveMap created with Objects.createMap can be assigned to the object tree with comet binary protocol">
      <failure message="Check map assigned to the object tree has the expected number of keys: expected 1 to equal 2" type="AssertionError"><![CDATA[AssertionError: Check map assigned to the object tree has the expected number of keys: expected 1 to equal 2
    at Object.action (test/realtime/objects.test.js:2945:47)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -1
      +2
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap created with Objects.createMap can be assigned to the object tree with comet text protocol" time="1.366" classname="LiveMap created with Objects.createMap can be assigned to the object tree with comet text protocol">
      <failure message="Check map assigned to the object tree has the expected number of keys: expected 1 to equal 2" type="AssertionError"><![CDATA[AssertionError: Check map assigned to the object tree has the expected number of keys: expected 1 to equal 2
    at Object.action (test/realtime/objects.test.js:2945:47)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -1
      +2
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap created with Objects.createMap can be assigned to the object tree with binary protocol" time="1.439" classname="LiveMap created with Objects.createMap can be assigned to the object tree with binary protocol">
      <failure message="Check map assigned to the object tree has the expected number of keys: expected +0 to equal 2" type="AssertionError"><![CDATA[AssertionError: Check map assigned to the object tree has the expected number of keys: expected +0 to equal 2
    at Object.action (test/realtime/objects.test.js:2945:47)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -0
      +2
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap created with Objects.createMap can be assigned to the object tree with text protocol" time="1.868" classname="LiveMap created with Objects.createMap can be assigned to the object tree with text protocol">
      <failure message="Check map assigned to the object tree has the expected number of keys: expected 1 to equal 2" type="AssertionError"><![CDATA[AssertionError: Check map assigned to the object tree has the expected number of keys: expected 1 to equal 2
    at Object.action (test/realtime/objects.test.js:2945:47)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual

      -1
      +2
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap can return LiveMap with initial value without applying CREATE operation" time="0.282" classname="Objects.createMap can return LiveMap with initial value without applying CREATE operation">
      <failure message="Invalid object data for MAP_SET op on objectId=map:L1QE2KFNgHqwz3sAPhtRcruI59Olp5qAqasmaRh33Dw@1746191248644 on key=foo" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:L1QE2KFNgHqwz3sAPhtRcruI59Olp5qAqasmaRh33Dw@1746191248644 on key=foo
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at /home/runner/work/ably-js/ably-js/src/plugins/objects/livemap.ts:609:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (src/plugins/objects/livemap.ts:600:55)
    at Function.fromObjectOperation (src/plugins/objects/livemap.ts:100:9)
    at Objects.createMap (src/plugins/objects/objects.ts:127:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at Object.action (test/realtime/objects.test.js:2969:25)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:57:11)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap can return LiveMap with initial value from applied CREATE operation with web_socket binary protocol" time="0.774" classname="Objects.createMap can return LiveMap with initial value from applied CREATE operation with web_socket binary protocol">
      <failure message="Invalid object data for MAP_SET op on objectId=map:HwCUGT3k2jNSSzZfur5pBKwJETEVyVNA74LAhN67swk@1746191249420 on key=baz" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:HwCUGT3k2jNSSzZfur5pBKwJETEVyVNA74LAhN67swk@1746191249420 on key=baz
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at /home/runner/work/ably-js/ably-js/src/plugins/objects/livemap.ts:609:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (src/plugins/objects/livemap.ts:600:55)
    at _LiveMap._applyMapCreate (src/plugins/objects/livemap.ts:656:17)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:402:23)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects.handleObjectMessages (src/plugins/objects/objects.ts:245:10)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:632:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectOperationMessageOnChannel (test/common/modules/objects_helper.js:271:7)
    at Objects.objects.publish (test/realtime/objects.test.js:2986:15)
    at Objects.createMap (src/plugins/objects/objects.ts:115:5)
    at Object.action (test/realtime/objects.test.js:2999:25)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap can return LiveMap with initial value from applied CREATE operation with web_socket text protocol" time="0.834" classname="Objects.createMap can return LiveMap with initial value from applied CREATE operation with web_socket text protocol">
      <failure message="Invalid object data for MAP_SET op on objectId=map:pUPXSaPqASERb23ZwmHKLLD71zqGnH0UPa3CSnKF6ak@1746191250254 on key=baz" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:pUPXSaPqASERb23ZwmHKLLD71zqGnH0UPa3CSnKF6ak@1746191250254 on key=baz
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at /home/runner/work/ably-js/ably-js/src/plugins/objects/livemap.ts:609:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (src/plugins/objects/livemap.ts:600:55)
    at _LiveMap._applyMapCreate (src/plugins/objects/livemap.ts:656:17)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:402:23)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects.handleObjectMessages (src/plugins/objects/objects.ts:245:10)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:632:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectOperationMessageOnChannel (test/common/modules/objects_helper.js:271:7)
    at Objects.objects.publish (test/realtime/objects.test.js:2986:15)
    at Objects.createMap (src/plugins/objects/objects.ts:115:5)
    at Object.action (test/realtime/objects.test.js:2999:25)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap can return LiveMap with initial value from applied CREATE operation with comet binary protocol" time="0.190" classname="Objects.createMap can return LiveMap with initial value from applied CREATE operation with comet binary protocol">
      <failure message="Invalid object data for MAP_SET op on objectId=map:3lQNmtw4jjP8zUyBaKEEUSlCZkI2t5hCe-KvJo4zerg@1746191250469 on key=baz" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:3lQNmtw4jjP8zUyBaKEEUSlCZkI2t5hCe-KvJo4zerg@1746191250469 on key=baz
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at /home/runner/work/ably-js/ably-js/src/plugins/objects/livemap.ts:609:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (src/plugins/objects/livemap.ts:600:55)
    at _LiveMap._applyMapCreate (src/plugins/objects/livemap.ts:656:17)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:402:23)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects.handleObjectMessages (src/plugins/objects/objects.ts:245:10)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:632:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectOperationMessageOnChannel (test/common/modules/objects_helper.js:271:7)
    at Objects.objects.publish (test/realtime/objects.test.js:2986:15)
    at Objects.createMap (src/plugins/objects/objects.ts:115:5)
    at Object.action (test/realtime/objects.test.js:2999:25)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap can return LiveMap with initial value from applied CREATE operation with comet text protocol" time="0.787" classname="Objects.createMap can return LiveMap with initial value from applied CREATE operation with comet text protocol">
      <failure message="Invalid object data for MAP_SET op on objectId=map:mfYAjGypRpui7lw0eWpoUFOt2c1ks31plTg8CA9twCs@1746191251258 on key=baz" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:mfYAjGypRpui7lw0eWpoUFOt2c1ks31plTg8CA9twCs@1746191251258 on key=baz
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at /home/runner/work/ably-js/ably-js/src/plugins/objects/livemap.ts:609:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (src/plugins/objects/livemap.ts:600:55)
    at _LiveMap._applyMapCreate (src/plugins/objects/livemap.ts:656:17)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:402:23)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects.handleObjectMessages (src/plugins/objects/objects.ts:245:10)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:632:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectOperationMessageOnChannel (test/common/modules/objects_helper.js:271:7)
    at Objects.objects.publish (test/realtime/objects.test.js:2986:15)
    at Objects.createMap (src/plugins/objects/objects.ts:115:5)
    at Object.action (test/realtime/objects.test.js:2999:25)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap can return LiveMap with initial value from applied CREATE operation with binary protocol" time="0.769" classname="Objects.createMap can return LiveMap with initial value from applied CREATE operation with binary protocol">
      <failure message="Invalid object data for MAP_SET op on objectId=map:kCnPgpsPKUmKEWJoAct2yPFHjQEpxGlmZ-MX1F5xBo0@1746191252007 on key=baz" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:kCnPgpsPKUmKEWJoAct2yPFHjQEpxGlmZ-MX1F5xBo0@1746191252007 on key=baz
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at /home/runner/work/ably-js/ably-js/src/plugins/objects/livemap.ts:609:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (src/plugins/objects/livemap.ts:600:55)
    at _LiveMap._applyMapCreate (src/plugins/objects/livemap.ts:656:17)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:402:23)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects.handleObjectMessages (src/plugins/objects/objects.ts:245:10)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:632:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectOperationMessageOnChannel (test/common/modules/objects_helper.js:271:7)
    at Objects.objects.publish (test/realtime/objects.test.js:2986:15)
    at Objects.createMap (src/plugins/objects/objects.ts:115:5)
    at Object.action (test/realtime/objects.test.js:2999:25)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap can return LiveMap with initial value from applied CREATE operation with text protocol" time="0.832" classname="Objects.createMap can return LiveMap with initial value from applied CREATE operation with text protocol">
      <failure message="Invalid object data for MAP_SET op on objectId=map:sH3qfE9ey9Xj_mJNHxusc_c24cTf2nIT_mpkkO99xew@1746191252843 on key=baz" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:sH3qfE9ey9Xj_mJNHxusc_c24cTf2nIT_mpkkO99xew@1746191252843 on key=baz
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at /home/runner/work/ably-js/ably-js/src/plugins/objects/livemap.ts:609:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (src/plugins/objects/livemap.ts:600:55)
    at _LiveMap._applyMapCreate (src/plugins/objects/livemap.ts:656:17)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:402:23)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects.handleObjectMessages (src/plugins/objects/objects.ts:245:10)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:632:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ObjectsHelper.processObjectOperationMessageOnChannel (test/common/modules/objects_helper.js:271:7)
    at Objects.objects.publish (test/realtime/objects.test.js:2986:15)
    at Objects.createMap (src/plugins/objects/objects.ts:115:5)
    at Object.action (test/realtime/objects.test.js:2999:25)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin initial value is not double counted for LiveMap from Objects.createMap when CREATE op is received" time="0.828" classname="initial value is not double counted for LiveMap from Objects.createMap when CREATE op is received">
      <failure message="Invalid object data for MAP_SET op on objectId=map:JAVRj8DL2dBKEj6aRv4T3nP-zbV0OSvr6N6USOdAmH4@1746191253671 on key=foo" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:JAVRj8DL2dBKEj6aRv4T3nP-zbV0OSvr6N6USOdAmH4@1746191253671 on key=foo
    at _LiveMap._applyMapSet (src/plugins/objects/livemap.ts:682:13)
    at /home/runner/work/ably-js/ably-js/src/plugins/objects/livemap.ts:609:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (src/plugins/objects/livemap.ts:600:55)
    at Function.fromObjectOperation (src/plugins/objects/livemap.ts:100:9)
    at Objects.createMap (src/plugins/objects/objects.ts:127:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at Object.action (test/realtime/objects.test.js:3021:25)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:57:11)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap throws on invalid input" time="0.745" classname="Objects.createMap throws on invalid input">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API getRoot method is synchronous" time="0.857" classname="batch API getRoot method is synchronous">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API .get method on a map returns BatchContext* wrappers for objects" time="2.326" classname="batch API .get method on a map returns BatchContext* wrappers for objects">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API access API methods on objects work and are synchronous" time="2.320" classname="batch API access API methods on objects work and are synchronous">
      <failure message="Check batch API map .get() method works and is synchronous: expected undefined to equal &apos;bar&apos;" type="AssertionError"><![CDATA[AssertionError: Check batch API map .get() method works and is synchronous: expected undefined to equal 'bar'
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3169:44
    at Objects.batch (src/plugins/objects/objects.ts:94:7)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at Object.action (test/realtime/objects.test.js:3160:13)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:57:11)

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API write API methods on objects do not mutate objects inside the batch callback" time="2.249" classname="batch API write API methods on objects do not mutate objects inside the batch callback">
      <failure message="Check batch API map .remove method does not mutate the object inside the batch callback: expected undefined to equal &apos;bar&apos;" type="AssertionError"><![CDATA[AssertionError: Check batch API map .remove method does not mutate the object inside the batch callback: expected undefined to equal 'bar'
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3226:44
    at Objects.batch (src/plugins/objects/objects.ts:94:7)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at Object.action (test/realtime/objects.test.js:3202:13)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:57:11)

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API scheduled operations are applied when batch callback is finished with web_socket binary protocol" time="2.967" classname="batch API scheduled operations are applied when batch callback is finished with web_socket binary protocol">
      <failure message="Check key &quot;baz&quot; has an expected value in a map after batch call: expected undefined to equal &apos;qux&apos;" type="AssertionError"><![CDATA[AssertionError: Check key "baz" has an expected value in a map after batch call: expected undefined to equal 'qux'
    at Object.action (test/realtime/objects.test.js:3263:39)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API scheduled operations are applied when batch callback is finished with web_socket text protocol" time="2.862" classname="batch API scheduled operations are applied when batch callback is finished with web_socket text protocol">
      <failure message="Check key &quot;baz&quot; has an expected value in a map after batch call: expected undefined to equal &apos;qux&apos;" type="AssertionError"><![CDATA[AssertionError: Check key "baz" has an expected value in a map after batch call: expected undefined to equal 'qux'
    at Object.action (test/realtime/objects.test.js:3263:39)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API scheduled operations are applied when batch callback is finished with comet binary protocol" time="2.526" classname="batch API scheduled operations are applied when batch callback is finished with comet binary protocol">
      <failure message="Check key &quot;baz&quot; has an expected value in a map after batch call: expected undefined to equal &apos;qux&apos;" type="AssertionError"><![CDATA[AssertionError: Check key "baz" has an expected value in a map after batch call: expected undefined to equal 'qux'
    at Object.action (test/realtime/objects.test.js:3263:39)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API scheduled operations are applied when batch callback is finished with comet text protocol" time="2.358" classname="batch API scheduled operations are applied when batch callback is finished with comet text protocol">
      <failure message="Check key &quot;baz&quot; has an expected value in a map after batch call: expected undefined to equal &apos;qux&apos;" type="AssertionError"><![CDATA[AssertionError: Check key "baz" has an expected value in a map after batch call: expected undefined to equal 'qux'
    at Object.action (test/realtime/objects.test.js:3263:39)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API scheduled operations are applied when batch callback is finished with binary protocol" time="2.321" classname="batch API scheduled operations are applied when batch callback is finished with binary protocol">
      <failure message="Check key &quot;baz&quot; has an expected value in a map after batch call: expected undefined to equal &apos;qux&apos;" type="AssertionError"><![CDATA[AssertionError: Check key "baz" has an expected value in a map after batch call: expected undefined to equal 'qux'
    at Object.action (test/realtime/objects.test.js:3263:39)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API scheduled operations are applied when batch callback is finished with text protocol" time="2.314" classname="batch API scheduled operations are applied when batch callback is finished with text protocol">
      <failure message="Check key &quot;baz&quot; has an expected value in a map after batch call: expected undefined to equal &apos;qux&apos;" type="AssertionError"><![CDATA[AssertionError: Check key "baz" has an expected value in a map after batch call: expected undefined to equal 'qux'
    at Object.action (test/realtime/objects.test.js:3263:39)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:46:15)

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API can be called without scheduling any operations" time="0.812" classname="batch API can be called without scheduling any operations">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API scheduled operations can be canceled by throwing an error in the batch callback" time="1.917" classname="batch API scheduled operations can be canceled by throwing an error in the batch callback">
      <failure message="Check key &quot;foo&quot; is not changed on a map after canceled batch call: expected undefined to equal &apos;bar&apos;" type="AssertionError"><![CDATA[AssertionError: Check key "foo" is not changed on a map after canceled batch call: expected undefined to equal 'bar'
    at Object.action (test/realtime/objects.test.js:3323:39)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:57:11)

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API batch context and derived objects can&apos;t be interacted with after the batch call" time="2.388" classname="batch API batch context and derived objects can&apos;t be interacted with after the batch call">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API batch context and derived objects can&apos;t be interacted with after error was thrown from batch callback" time="1.778" classname="batch API batch context and derived objects can&apos;t be interacted with after error was thrown from batch callback">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap enumeration" time="0.358" classname="LiveMap enumeration">
      <failure message="Check LiveMap.entries() returns expected entries: expected [ [ &apos;counter1&apos;, …(1) ], …(1) ] to deeply equal [ [ &apos;counter1&apos;, …(1) ], …(1) ]" type="AssertionError"><![CDATA[AssertionError: Check LiveMap.entries() returns expected entries: expected [ [ 'counter1', …(1) ], …(1) ] to deeply equal [ [ 'counter1', …(1) ], …(1) ]
    at Object.action (test/realtime/objects.test.js:3467:49)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3569:13
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:3562:11
    at Context.<anonymous> (test/realtime/objects.test.js:57:11)

      + expected - actual

           }
         ]
         [
           "foo"
      -    [undefined]
      +    "bar"
         ]
       ]
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin BatchContextLiveMap enumeration" time="0.767" classname="BatchContextLiveMap enumeration">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming COUNTER_INC operation on a LiveCounter with web_socket binary protocol" time="0.508" classname="can subscribe to the incoming COUNTER_INC operation on a LiveCounter with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming COUNTER_INC operation on a LiveCounter with web_socket text protocol" time="0.370" classname="can subscribe to the incoming COUNTER_INC operation on a LiveCounter with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming COUNTER_INC operation on a LiveCounter with comet binary protocol" time="0.863" classname="can subscribe to the incoming COUNTER_INC operation on a LiveCounter with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming COUNTER_INC operation on a LiveCounter with comet text protocol" time="0.437" classname="can subscribe to the incoming COUNTER_INC operation on a LiveCounter with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming COUNTER_INC operation on a LiveCounter with binary protocol" time="0.896" classname="can subscribe to the incoming COUNTER_INC operation on a LiveCounter with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming COUNTER_INC operation on a LiveCounter with text protocol" time="0.567" classname="can subscribe to the incoming COUNTER_INC operation on a LiveCounter with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveCounter with web_socket binary protocol" time="0.752" classname="can subscribe to multiple incoming operations on a LiveCounter with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveCounter with web_socket text protocol" time="1.064" classname="can subscribe to multiple incoming operations on a LiveCounter with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveCounter with comet binary protocol" time="0.968" classname="can subscribe to multiple incoming operations on a LiveCounter with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveCounter with comet text protocol" time="0.440" classname="can subscribe to multiple incoming operations on a LiveCounter with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveCounter with binary protocol" time="1.015" classname="can subscribe to multiple incoming operations on a LiveCounter with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveCounter with text protocol" time="1.030" classname="can subscribe to multiple incoming operations on a LiveCounter with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_SET operation on a LiveMap with web_socket binary protocol" time="60.000" classname="can subscribe to the incoming MAP_SET operation on a LiveMap with web_socket binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_SET operation on a LiveMap with web_socket text protocol" time="60.003" classname="can subscribe to the incoming MAP_SET operation on a LiveMap with web_socket text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_SET operation on a LiveMap with comet binary protocol" time="60.000" classname="can subscribe to the incoming MAP_SET operation on a LiveMap with comet binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_SET operation on a LiveMap with comet text protocol" time="60.001" classname="can subscribe to the incoming MAP_SET operation on a LiveMap with comet text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_SET operation on a LiveMap with binary protocol" time="60.000" classname="can subscribe to the incoming MAP_SET operation on a LiveMap with binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_SET operation on a LiveMap with text protocol" time="60.000" classname="can subscribe to the incoming MAP_SET operation on a LiveMap with text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_REMOVE operation on a LiveMap with web_socket binary protocol" time="1.051" classname="can subscribe to the incoming MAP_REMOVE operation on a LiveMap with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_REMOVE operation on a LiveMap with web_socket text protocol" time="0.555" classname="can subscribe to the incoming MAP_REMOVE operation on a LiveMap with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_REMOVE operation on a LiveMap with comet binary protocol" time="1.160" classname="can subscribe to the incoming MAP_REMOVE operation on a LiveMap with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_REMOVE operation on a LiveMap with comet text protocol" time="0.478" classname="can subscribe to the incoming MAP_REMOVE operation on a LiveMap with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_REMOVE operation on a LiveMap with binary protocol" time="1.005" classname="can subscribe to the incoming MAP_REMOVE operation on a LiveMap with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_REMOVE operation on a LiveMap with text protocol" time="1.017" classname="can subscribe to the incoming MAP_REMOVE operation on a LiveMap with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveMap with web_socket binary protocol" time="0.728" classname="can subscribe to multiple incoming operations on a LiveMap with web_socket binary protocol">
      <failure message="Check map subscription callback is called with an expected update object for 1 times: expected { update: { foo: &apos;removed&apos; } } to deeply equal { update: { foo: &apos;updated&apos; } }" type="AssertionError"><![CDATA[AssertionError: Check map subscription callback is called with an expected update object for 1 times: expected { update: { foo: 'removed' } } to deeply equal { update: { foo: 'updated' } }
    at Object.<anonymous> (test/realtime/objects.test.js:3738:42)
    at callListener (src/common/lib/util/eventemitter.ts:8:14)
    at /home/runner/work/ably-js/ably-js/src/common/lib/util/eventemitter.ts:220:7
    at Array.forEach (<anonymous>)
    at EventEmitter.emit (src/common/lib/util/eventemitter.ts:219:15)
    at _LiveMap.notifyUpdated (src/plugins/objects/liveobject.ts:154:25)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:437:10)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects.handleObjectMessages (src/plugins/objects/objects.ts:245:10)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:632:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at Channels2.processChannelMessage (src/common/lib/client/baserealtime.ts:151:5)
    at _ConnectionManager.processChannelMessage (src/common/lib/transport/connectionmanager.ts:1928:5)

      + expected - actual

       {
         "update": {
      -    "foo": "removed"
      +    "foo": "updated"
         }
       }
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveMap with web_socket text protocol" time="0.511" classname="can subscribe to multiple incoming operations on a LiveMap with web_socket text protocol">
      <failure message="Check map subscription callback is called with an expected update object for 1 times: expected { update: { foo: &apos;removed&apos; } } to deeply equal { update: { foo: &apos;updated&apos; } }" type="AssertionError"><![CDATA[AssertionError: Check map subscription callback is called with an expected update object for 1 times: expected { update: { foo: 'removed' } } to deeply equal { update: { foo: 'updated' } }
    at Object.<anonymous> (test/realtime/objects.test.js:3738:42)
    at callListener (src/common/lib/util/eventemitter.ts:8:14)
    at /home/runner/work/ably-js/ably-js/src/common/lib/util/eventemitter.ts:220:7
    at Array.forEach (<anonymous>)
    at EventEmitter.emit (src/common/lib/util/eventemitter.ts:219:15)
    at _LiveMap.notifyUpdated (src/plugins/objects/liveobject.ts:154:25)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:437:10)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects.handleObjectMessages (src/plugins/objects/objects.ts:245:10)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:632:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at Channels2.processChannelMessage (src/common/lib/client/baserealtime.ts:151:5)
    at _ConnectionManager.processChannelMessage (src/common/lib/transport/connectionmanager.ts:1928:5)

      + expected - actual

       {
         "update": {
      -    "foo": "removed"
      +    "foo": "updated"
         }
       }
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveMap with comet binary protocol" time="0.952" classname="can subscribe to multiple incoming operations on a LiveMap with comet binary protocol">
      <failure message="Check map subscription callback is called with an expected update object for 1 times: expected { update: { foo: &apos;removed&apos; } } to deeply equal { update: { foo: &apos;updated&apos; } }" type="AssertionError"><![CDATA[AssertionError: Check map subscription callback is called with an expected update object for 1 times: expected { update: { foo: 'removed' } } to deeply equal { update: { foo: 'updated' } }
    at Object.<anonymous> (test/realtime/objects.test.js:3738:42)
    at callListener (src/common/lib/util/eventemitter.ts:8:14)
    at /home/runner/work/ably-js/ably-js/src/common/lib/util/eventemitter.ts:220:7
    at Array.forEach (<anonymous>)
    at EventEmitter.emit (src/common/lib/util/eventemitter.ts:219:15)
    at _LiveMap.notifyUpdated (src/plugins/objects/liveobject.ts:154:25)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:437:10)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects.handleObjectMessages (src/plugins/objects/objects.ts:245:10)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:632:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at Channels2.processChannelMessage (src/common/lib/client/baserealtime.ts:151:5)
    at _ConnectionManager.processChannelMessage (src/common/lib/transport/connectionmanager.ts:1928:5)

      + expected - actual

       {
         "update": {
      -    "foo": "removed"
      +    "foo": "updated"
         }
       }
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveMap with comet text protocol" time="0.443" classname="can subscribe to multiple incoming operations on a LiveMap with comet text protocol">
      <failure message="Check map subscription callback is called with an expected update object for 1 times: expected { update: { foo: &apos;removed&apos; } } to deeply equal { update: { foo: &apos;updated&apos; } }" type="AssertionError"><![CDATA[AssertionError: Check map subscription callback is called with an expected update object for 1 times: expected { update: { foo: 'removed' } } to deeply equal { update: { foo: 'updated' } }
    at Object.<anonymous> (test/realtime/objects.test.js:3738:42)
    at callListener (src/common/lib/util/eventemitter.ts:8:14)
    at /home/runner/work/ably-js/ably-js/src/common/lib/util/eventemitter.ts:220:7
    at Array.forEach (<anonymous>)
    at EventEmitter.emit (src/common/lib/util/eventemitter.ts:219:15)
    at _LiveMap.notifyUpdated (src/plugins/objects/liveobject.ts:154:25)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:437:10)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects.handleObjectMessages (src/plugins/objects/objects.ts:245:10)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:632:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at Channels2.processChannelMessage (src/common/lib/client/baserealtime.ts:151:5)
    at _ConnectionManager.processChannelMessage (src/common/lib/transport/connectionmanager.ts:1928:5)

      + expected - actual

       {
         "update": {
      -    "foo": "removed"
      +    "foo": "updated"
         }
       }
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveMap with binary protocol" time="1.095" classname="can subscribe to multiple incoming operations on a LiveMap with binary protocol">
      <failure message="Check map subscription callback is called with an expected update object for 1 times: expected { update: { foo: &apos;removed&apos; } } to deeply equal { update: { foo: &apos;updated&apos; } }" type="AssertionError"><![CDATA[AssertionError: Check map subscription callback is called with an expected update object for 1 times: expected { update: { foo: 'removed' } } to deeply equal { update: { foo: 'updated' } }
    at Object.<anonymous> (test/realtime/objects.test.js:3738:42)
    at callListener (src/common/lib/util/eventemitter.ts:8:14)
    at /home/runner/work/ably-js/ably-js/src/common/lib/util/eventemitter.ts:220:7
    at Array.forEach (<anonymous>)
    at EventEmitter.emit (src/common/lib/util/eventemitter.ts:219:15)
    at _LiveMap.notifyUpdated (src/plugins/objects/liveobject.ts:154:25)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:437:10)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects.handleObjectMessages (src/plugins/objects/objects.ts:245:10)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:632:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at Channels2.processChannelMessage (src/common/lib/client/baserealtime.ts:151:5)
    at _ConnectionManager.processChannelMessage (src/common/lib/transport/connectionmanager.ts:1928:5)

      + expected - actual

       {
         "update": {
      -    "foo": "removed"
      +    "foo": "updated"
         }
       }
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveMap with text protocol" time="1.011" classname="can subscribe to multiple incoming operations on a LiveMap with text protocol">
      <failure message="Check map subscription callback is called with an expected update object for 1 times: expected { update: { foo: &apos;removed&apos; } } to deeply equal { update: { foo: &apos;updated&apos; } }" type="AssertionError"><![CDATA[AssertionError: Check map subscription callback is called with an expected update object for 1 times: expected { update: { foo: 'removed' } } to deeply equal { update: { foo: 'updated' } }
    at Object.<anonymous> (test/realtime/objects.test.js:3738:42)
    at callListener (src/common/lib/util/eventemitter.ts:8:14)
    at /home/runner/work/ably-js/ably-js/src/common/lib/util/eventemitter.ts:220:7
    at Array.forEach (<anonymous>)
    at EventEmitter.emit (src/common/lib/util/eventemitter.ts:219:15)
    at _LiveMap.notifyUpdated (src/plugins/objects/liveobject.ts:154:25)
    at _LiveMap.applyOperation (src/plugins/objects/livemap.ts:437:10)
    at Objects._applyObjectMessages (src/plugins/objects/objects.ts:443:60)
    at Objects.handleObjectMessages (src/plugins/objects/objects.ts:245:10)
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:632:25)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at Channels2.processChannelMessage (src/common/lib/client/baserealtime.ts:151:5)
    at _ConnectionManager.processChannelMessage (src/common/lib/transport/connectionmanager.ts:1928:5)

      + expected - actual

       {
         "update": {
      -    "foo": "removed"
      +    "foo": "updated"
         }
       }
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can unsubscribe from LiveCounter updates via returned &quot;unsubscribe&quot; callback" time="1.039" classname="can unsubscribe from LiveCounter updates via returned &quot;unsubscribe&quot; callback">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can unsubscribe from LiveCounter updates via LiveCounter.unsubscribe() call" time="0.975" classname="can unsubscribe from LiveCounter updates via LiveCounter.unsubscribe() call">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can remove all LiveCounter update listeners via LiveCounter.unsubscribeAll() call" time="1.079" classname="can remove all LiveCounter update listeners via LiveCounter.unsubscribeAll() call">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can unsubscribe from LiveMap updates via returned &quot;unsubscribe&quot; callback" time="60.002" classname="can unsubscribe from LiveMap updates via returned &quot;unsubscribe&quot; callback">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can unsubscribe from LiveMap updates via LiveMap.unsubscribe() call" time="60.006" classname="can unsubscribe from LiveMap updates via LiveMap.unsubscribe() call">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can remove all LiveMap update listeners via LiveMap.unsubscribeAll() call" time="60.003" classname="can remove all LiveMap update listeners via LiveMap.unsubscribeAll() call">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin tombstoned object is removed from the pool after the GC grace period" time="2.041" classname="tombstoned object is removed from the pool after the GC grace period">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin tombstoned map entry is removed from the LiveMap after the GC grace period with web_socket binary protocol" time="60.000" classname="tombstoned map entry is removed from the LiveMap after the GC grace period with web_socket binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin tombstoned map entry is removed from the LiveMap after the GC grace period with web_socket text protocol" time="60.000" classname="tombstoned map entry is removed from the LiveMap after the GC grace period with web_socket text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin tombstoned map entry is removed from the LiveMap after the GC grace period with comet binary protocol" time="60.000" classname="tombstoned map entry is removed from the LiveMap after the GC grace period with comet binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin tombstoned map entry is removed from the LiveMap after the GC grace period with comet text protocol" time="60.000" classname="tombstoned map entry is removed from the LiveMap after the GC grace period with comet text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin tombstoned map entry is removed from the LiveMap after the GC grace period with binary protocol" time="60.000" classname="tombstoned map entry is removed from the LiveMap after the GC grace period with binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin tombstoned map entry is removed from the LiveMap after the GC grace period with text protocol" time="60.000" classname="tombstoned map entry is removed from the LiveMap after the GC grace period with text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)" type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js)
    at listOnTimeout (node:internal/timers:569:17)
    at processTimers (node:internal/timers:512:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin public API throws missing object modes error when attached without correct modes" time="2.027" classname="public API throws missing object modes error when attached without correct modes">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin public API throws missing object modes error when not yet attached but client options are missing correct modes" time="2.391" classname="public API throws missing object modes error when not yet attached but client options are missing correct modes">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin public API throws invalid channel state error when channel DETACHED" time="2.299" classname="public API throws invalid channel state error when channel DETACHED">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin public API throws invalid channel state error when channel FAILED" time="1.883" classname="public API throws invalid channel state error when channel FAILED">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin public write API throws invalid channel state error when channel SUSPENDED" time="1.810" classname="public write API throws invalid channel state error when channel SUSPENDED">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin object message publish respects connectionDetails.maxMessageSize" time="0.839" classname="object message publish respects connectionDetails.maxMessageSize">
      <failure message="Expected async function to throw an error: expected undefined to exist" type="AssertionError"><![CDATA[AssertionError: Expected async function to throw an error: expected undefined to exist
    at expectToThrowAsync (test/realtime/objects.test.js:85:71)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:4511:25
    at SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at Context.<anonymous> (test/realtime/objects.test.js:4480:9)]]></failure>
    </testcase>
  </testsuite>
  <testsuite name="ObjectMessage message size" timestamp="2025-05-02T13:23:41" tests="19" file="/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js" time="6.624" failures="8">
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size client id" time="0.000" classname="client id">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size extras" time="0.000" classname="extras">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size object id" time="0.000" classname="object id">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map create op no payload" time="0.001" classname="map create op no payload">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map create op with object payload" time="0.000" classname="map create op with object payload">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map create op with string payload" time="0.000" classname="map create op with string payload">
      <failure message="expected 5 to equal 13" type="AssertionError"><![CDATA[AssertionError: expected 5 to equal 13
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:4739:56
    at Context.<anonymous> (test/realtime/objects.test.js:57:17)
    at processImmediate (node:internal/timers:476:21)

      + expected - actual

      -5
      +13
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map create op with bytes payload" time="0.000" classname="map create op with bytes payload">
      <failure message="expected 5 to equal 13" type="AssertionError"><![CDATA[AssertionError: expected 5 to equal 13
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:4739:56
    at Context.<anonymous> (test/realtime/objects.test.js:57:17)
    at processImmediate (node:internal/timers:476:21)

      + expected - actual

      -5
      +13
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map create op with boolean payload" time="0.000" classname="map create op with boolean payload">
      <failure message="expected 5 to equal 6" type="AssertionError"><![CDATA[AssertionError: expected 5 to equal 6
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:4739:56
    at Context.<anonymous> (test/realtime/objects.test.js:57:17)
    at processImmediate (node:internal/timers:476:21)

      + expected - actual

      -5
      +6
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map remove op" time="0.000" classname="map remove op">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map set operation value=object" time="0.000" classname="map set operation value=object">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map set operation value=string" time="0.000" classname="map set operation value=string">
      <failure message="expected 6 to equal 14" type="AssertionError"><![CDATA[AssertionError: expected 6 to equal 14
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:4739:56
    at Context.<anonymous> (test/realtime/objects.test.js:57:17)
    at processImmediate (node:internal/timers:476:21)

      + expected - actual

      -6
      +14
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map set operation value=bytes" time="0.000" classname="map set operation value=bytes">
      <failure message="expected 6 to equal 14" type="AssertionError"><![CDATA[AssertionError: expected 6 to equal 14
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:4739:56
    at Context.<anonymous> (test/realtime/objects.test.js:57:17)
    at processImmediate (node:internal/timers:476:21)

      + expected - actual

      -6
      +14
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map set operation value=boolean" time="0.000" classname="map set operation value=boolean">
      <failure message="expected 6 to equal 7" type="AssertionError"><![CDATA[AssertionError: expected 6 to equal 7
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:4739:56
    at Context.<anonymous> (test/realtime/objects.test.js:57:17)
    at processImmediate (node:internal/timers:476:21)

      + expected - actual

      -6
      +7
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map set operation value=double" time="0.000" classname="map set operation value=double">
      <failure message="expected 6 to equal 14" type="AssertionError"><![CDATA[AssertionError: expected 6 to equal 14
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:4739:56
    at Context.<anonymous> (test/realtime/objects.test.js:57:17)
    at processImmediate (node:internal/timers:476:21)

      + expected - actual

      -6
      +14
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map object" time="0.000" classname="map object">
      <failure message="expected 15 to equal 49" type="AssertionError"><![CDATA[AssertionError: expected 15 to equal 49
    at /home/runner/work/ably-js/ably-js/test/realtime/objects.test.js:4739:56
    at Context.<anonymous> (test/realtime/objects.test.js:57:17)
    at processImmediate (node:internal/timers:476:21)

      + expected - actual

      -15
      +49
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size counter create op no payload" time="0.000" classname="counter create op no payload">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size counter create op with payload" time="0.000" classname="counter create op with payload">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size counter inc op" time="0.000" classname="counter inc op">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size counter object" time="0.000" classname="counter object">
    </testcase>
  </testsuite>
</testsuites>