<testsuites name="Mocha Tests" time="3435.065" tests="272" failures="142">
  <testsuite name="Root Suite" timestamp="2025-05-02T12:29:32" tests="0" time="0.000" failures="0">
  </testsuite>
  <testsuite name="realtime/objects" timestamp="2025-05-02T12:29:32" tests="1" time="0.000" failures="0">
    <testcase name="realtime/objects can attach to channel with Objects modes" time="0.546" classname="can attach to channel with Objects modes">
    </testcase>
  </testsuite>
  <testsuite name="Realtime without Objects plugin" timestamp="2025-05-02T12:29:41" tests="3" time="1.441" 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.001" 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.721" 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.709" classname="doesn&apos;t break when it receives an OBJECT_SYNC ProtocolMessage">
    </testcase>
  </testsuite>
  <testsuite name="Realtime with Objects plugin" timestamp="2025-05-02T12:29:42" tests="249" 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.355" classname="getRoot() returns LiveMap instance">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin getRoot() returns LiveObject with id &quot;root&quot;" time="0.348" 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.346" 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.357" 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.348" 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.350" 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 (build/objects.js:1346:13)
    at http://localhost:3000/build/objects.js:1295:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (build/objects.js:1289:74)
    at _LiveMap.overrideWithObjectState (build/objects.js:1224:14)
    at Objects._applySync (build/objects.js:2015:39)
    at Objects._endSync (build/objects.js:1984:10)
    at Objects.handleObjectSyncMessages (build/objects.js:1897:12)
    at _RealtimeChannel.processMessage (build/ably.js:4480:25)
    at async ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)]]></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.003" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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.000" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin builds object tree from OBJECT_SYNC sequence on channel attachment with xhr_polling binary protocol" time="60.001" classname="builds object tree from OBJECT_SYNC sequence on channel attachment with xhr_polling 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin builds object tree from OBJECT_SYNC sequence on channel attachment with xhr_polling text protocol" time="60.000" classname="builds object tree from OBJECT_SYNC sequence on channel attachment with xhr_polling 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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.001" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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="60.000" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter is initialized with initial value from OBJECT_SYNC sequence with xhr_polling binary protocol" time="60.000" classname="LiveCounter is initialized with initial value from OBJECT_SYNC sequence with xhr_polling 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter is initialized with initial value from OBJECT_SYNC sequence with xhr_polling text protocol" time="60.000" classname="LiveCounter is initialized with initial value from OBJECT_SYNC sequence with xhr_polling 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter is initialized with initial value from OBJECT_SYNC sequence with text protocol" time="60.000" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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="60.000" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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.001" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap is initialized with initial value from OBJECT_SYNC sequence with xhr_polling binary protocol" time="60.000" classname="LiveMap is initialized with initial value from OBJECT_SYNC sequence with xhr_polling 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap is initialized with initial value from OBJECT_SYNC sequence with xhr_polling text protocol" time="60.000" classname="LiveMap is initialized with initial value from OBJECT_SYNC sequence with xhr_polling 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap is initialized with initial value from OBJECT_SYNC sequence with binary protocol" time="60.000" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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="60.000" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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="60.000" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap can reference the same object in their keys with xhr_polling binary protocol" time="60.000" classname="LiveMap can reference the same object in their keys with xhr_polling 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap can reference the same object in their keys with xhr_polling text protocol" time="60.000" classname="LiveMap can reference the same object in their keys with xhr_polling 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap can reference the same object in their keys with binary protocol" time="60.000" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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.673" 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 (build/objects.js:1346:13)
    at http://localhost:3000/build/objects.js:1295:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (build/objects.js:1289:74)
    at _LiveMap.overrideWithObjectState (build/objects.js:1224:14)
    at Objects._applySync (build/objects.js:2015:39)
    at Objects._endSync (build/objects.js:1984:10)
    at Objects.handleObjectSyncMessages (build/objects.js:1897:12)
    at _RealtimeChannel.processMessage (build/ably.js:4480:25)
    at async ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)]]></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.824" 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 (build/objects.js:1346:13)
    at http://localhost:3000/build/objects.js:1295:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (build/objects.js:1289:74)
    at _LiveMap.overrideWithObjectState (build/objects.js:1224:14)
    at Objects._applySync (build/objects.js:2015:39)
    at Objects._endSync (build/objects.js:1984:10)
    at Objects.handleObjectSyncMessages (build/objects.js:1897:12)
    at _RealtimeChannel.processMessage (build/ably.js:4480:25)
    at async ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)]]></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="1.478" 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 (build/objects.js:1346:13)
    at http://localhost:3000/build/objects.js:1295:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (build/objects.js:1289:74)
    at _LiveMap.overrideWithObjectState (build/objects.js:1224:14)
    at Objects._applySync (build/objects.js:2015:39)
    at Objects._endSync (build/objects.js:1984:10)
    at Objects.handleObjectSyncMessages (build/objects.js:1897:12)
    at _RealtimeChannel.processMessage (build/ably.js:4480:25)
    at async ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with xhr_polling binary protocol" time="0.856" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with xhr_polling 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 (build/objects.js:1346:13)
    at http://localhost:3000/build/objects.js:1295:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (build/objects.js:1289:74)
    at _LiveMap.overrideWithObjectState (build/objects.js:1224:14)
    at Objects._applySync (build/objects.js:2015:39)
    at Objects._endSync (build/objects.js:1984:10)
    at Objects.handleObjectSyncMessages (build/objects.js:1897:12)
    at _RealtimeChannel.processMessage (build/ably.js:4480:25)
    at async ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with xhr_polling text protocol" time="1.196" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with xhr_polling 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 (build/objects.js:1346:13)
    at http://localhost:3000/build/objects.js:1295:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (build/objects.js:1289:74)
    at _LiveMap.overrideWithObjectState (build/objects.js:1224:14)
    at Objects._applySync (build/objects.js:2015:39)
    at Objects._endSync (build/objects.js:1984:10)
    at Objects.handleObjectSyncMessages (build/objects.js:1897:12)
    at _RealtimeChannel.processMessage (build/ably.js:4480:25)
    at async ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)]]></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="1.379" 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 (build/objects.js:1346:13)
    at http://localhost:3000/build/objects.js:1295:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (build/objects.js:1289:74)
    at _LiveMap.overrideWithObjectState (build/objects.js:1224:14)
    at Objects._applySync (build/objects.js:2015:39)
    at Objects._endSync (build/objects.js:1984:10)
    at Objects.handleObjectSyncMessages (build/objects.js:1897:12)
    at _RealtimeChannel.processMessage (build/ably.js:4480:25)
    at async ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)]]></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="1.381" 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 (build/objects.js:1346:13)
    at http://localhost:3000/build/objects.js:1295:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (build/objects.js:1289:74)
    at _LiveMap.overrideWithObjectState (build/objects.js:1224:14)
    at Objects._applySync (build/objects.js:2015:39)
    at Objects._endSync (build/objects.js:1984:10)
    at Objects.handleObjectSyncMessages (build/objects.js:1897:12)
    at _RealtimeChannel.processMessage (build/ably.js:4480:25)
    at async ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)]]></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="0.856" 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="1.455" 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 xhr_polling binary protocol" time="1.323" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with xhr_polling 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 xhr_polling text protocol" time="1.093" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with xhr_polling 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="1.222" 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.710" 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="1.681" 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 http://localhost:3000/test/realtime/objects.test.js:876:40
    at Array.forEach (<anonymous>)
    at Object.action (test/realtime/objects.test.js:867:35)
    at async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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="1.251" 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 http://localhost:3000/test/realtime/objects.test.js:876:40
    at Array.forEach (<anonymous>)
    at Object.action (test/realtime/objects.test.js:867:35)
    at async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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 xhr_polling binary protocol" time="1.286" classname="can apply MAP_CREATE with primitives object operation messages with xhr_polling 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 http://localhost:3000/test/realtime/objects.test.js:876:40
    at Array.forEach (<anonymous>)
    at Object.action (test/realtime/objects.test.js:867:35)
    at async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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 xhr_polling text protocol" time="1.161" classname="can apply MAP_CREATE with primitives object operation messages with xhr_polling 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 http://localhost:3000/test/realtime/objects.test.js:876:40
    at Array.forEach (<anonymous>)
    at Object.action (test/realtime/objects.test.js:867:35)
    at async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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="1.241" 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 http://localhost:3000/test/realtime/objects.test.js:876:40
    at Array.forEach (<anonymous>)
    at Object.action (test/realtime/objects.test.js:867:35)
    at async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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.688" 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 http://localhost:3000/test/realtime/objects.test.js:876:40
    at Array.forEach (<anonymous>)
    at Object.action (test/realtime/objects.test.js:867:35)
    at async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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="0.936" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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.642" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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 xhr_polling binary protocol" time="1.309" classname="can apply MAP_CREATE with object ids object operation messages with xhr_polling 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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 xhr_polling text protocol" time="1.415" classname="can apply MAP_CREATE with object ids object operation messages with xhr_polling 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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="1.453" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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.519" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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.434" 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:7554389630250786@1746190456772 on key=foo" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:7554389630250786@1746190456772 on key=foo
    at _LiveMap._applyMapSet (build/objects.js:1346:13)
    at _LiveMap.applyOperation (build/objects.js:1148:25)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects.handleObjectMessages (build/objects.js:1908:10)
    at _RealtimeChannel.processMessage (build/ably.js:4478:25)
    at async ObjectsHelper.processObjectOperationMessageOnChannel (test/common/modules/objects_helper.js:271:7)
    at async http://localhost:3000/test/realtime/objects.test.js:993:17
    at async Promise.all (index 0)
    at async Object.action (test/realtime/objects.test.js:990:13)
    at async http://localhost:3000/test/realtime/objects.test.js:3569:13]]></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.000" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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.001" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with primitives object operation messages with xhr_polling binary protocol" time="60.000" classname="can apply MAP_SET with primitives object operation messages with xhr_polling 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with primitives object operation messages with xhr_polling text protocol" time="60.000" classname="can apply MAP_SET with primitives object operation messages with xhr_polling 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with primitives object operation messages with text protocol" time="60.000" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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="1.627" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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.135" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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 xhr_polling binary protocol" time="1.699" classname="can apply MAP_SET with object ids object operation messages with xhr_polling 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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 xhr_polling text protocol" time="0.987" classname="can apply MAP_SET with object ids object operation messages with xhr_polling 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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.572" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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="1.646" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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="1.109" 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:8595028792758472@1746190826782 on key=foo1" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:8595028792758472@1746190826782 on key=foo1
    at _LiveMap._applyMapSet (build/objects.js:1346:13)
    at http://localhost:3000/build/objects.js:1295:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (build/objects.js:1289:74)
    at _LiveMap._applyMapCreate (build/objects.js:1330:17)
    at _LiveMap.applyOperation (build/objects.js:1141:23)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects.handleObjectMessages (build/objects.js:1908:10)
    at _RealtimeChannel.processMessage (build/ably.js:4478:25)
    at async ObjectsHelper.processObjectOperationMessageOnChannel (test/common/modules/objects_helper.js:271:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_REMOVE object operation messages with web_socket binary protocol" time="0.933" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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.930" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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 xhr_polling binary protocol" time="0.533" classname="can apply MAP_REMOVE object operation messages with xhr_polling 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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 xhr_polling text protocol" time="0.885" classname="can apply MAP_REMOVE object operation messages with xhr_polling 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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.946" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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="1.387" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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="1.127" 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:38130269832896446@1746190833619 on key=foo1" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:38130269832896446@1746190833619 on key=foo1
    at _LiveMap._applyMapSet (build/objects.js:1346:13)
    at http://localhost:3000/build/objects.js:1295:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (build/objects.js:1289:74)
    at _LiveMap._applyMapCreate (build/objects.js:1330:17)
    at _LiveMap.applyOperation (build/objects.js:1141:23)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects.handleObjectMessages (build/objects.js:1908:10)
    at _RealtimeChannel.processMessage (build/ably.js:4478:25)
    at async ObjectsHelper.processObjectOperationMessageOnChannel (test/common/modules/objects_helper.js:271:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_CREATE object operation messages with web_socket binary protocol" time="1.118" 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.819" 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 xhr_polling binary protocol" time="1.237" classname="can apply COUNTER_CREATE object operation messages with xhr_polling binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_CREATE object operation messages with xhr_polling text protocol" time="1.309" classname="can apply COUNTER_CREATE object operation messages with xhr_polling text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_CREATE object operation messages with binary protocol" time="1.421" 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="1.348" 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.707" 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="3.102" 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="2.548" 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 xhr_polling binary protocol" time="2.775" classname="can apply COUNTER_INC object operation messages with xhr_polling binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_INC object operation messages with xhr_polling text protocol" time="2.813" classname="can apply COUNTER_INC object operation messages with xhr_polling text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_INC object operation messages with binary protocol" time="2.690" 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="2.597" 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="1.063" 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="1.045" 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.539" 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.674" 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="1.668" 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 (build/ably.js:1725:14)
    at http://localhost:3000/build/ably.js:1879:7
    at Array.forEach (<anonymous>)
    at EventEmitter.emit (build/ably.js:1878:15)
    at _LiveMap.notifyUpdated (build/objects.js:476:25)
    at _LiveMap.applyOperation (build/objects.js:1169:10)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects.handleObjectMessages (build/objects.js:1908:10)
    at _RealtimeChannel.processMessage (build/ably.js:4478:25)

      + 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.872" 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="1.464" 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="1.061" 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="1.141" 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 (build/objects.js:1346:13)
    at _LiveMap.applyOperation (build/objects.js:1148:25)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects._endSync (build/objects.js:1985:10)
    at Objects.handleObjectSyncMessages (build/objects.js:1897:12)
    at _RealtimeChannel.processMessage (build/ably.js:4480:25)
    at async ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)
    at async Object.action (test/realtime/objects.test.js:2003:13)
    at async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin buffered object operation messages are discarded when new OBJECT_SYNC sequence starts" time="0.676" 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 (build/objects.js:1346:13)
    at _LiveMap.applyOperation (build/objects.js:1148:25)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects._endSync (build/objects.js:1985:10)
    at Objects.handleObjectSyncMessages (build/objects.js:1897:12)
    at _RealtimeChannel.processMessage (build/ably.js:4480:25)
    at async ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)
    at async Object.action (test/realtime/objects.test.js:2066:13)
    at async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)]]></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="1.140" 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:3242882904418587@1746190869613 on key=foo5" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:3242882904418587@1746190869613 on key=foo5
    at _LiveMap._applyMapSet (build/objects.js:1346:13)
    at _LiveMap.applyOperation (build/objects.js:1148:25)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects._endSync (build/objects.js:1985:10)
    at Objects.handleObjectSyncMessages (build/objects.js:1897:12)
    at _RealtimeChannel.processMessage (build/ably.js:4480:25)
    at async ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)
    at async Object.action (test/realtime/objects.test.js:2178:13)
    at async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)]]></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.678" 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 (build/objects.js:1346:13)
    at _LiveMap.applyOperation (build/objects.js:1148:25)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects._endSync (build/objects.js:1985:10)
    at Objects.handleObjectSyncMessages (build/objects.js:1897:12)
    at _RealtimeChannel.processMessage (build/ably.js:4480:25)
    at async ObjectsHelper.processObjectStateMessageOnChannel (test/common/modules/objects_helper.js:286:7)
    at async Object.action (test/realtime/objects.test.js:2235:13)
    at async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.increment sends COUNTER_INC operation with web_socket binary protocol" time="4.897" 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="5.184" 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 xhr_polling binary protocol" time="5.554" classname="LiveCounter.increment sends COUNTER_INC operation with xhr_polling binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.increment sends COUNTER_INC operation with xhr_polling text protocol" time="4.775" classname="LiveCounter.increment sends COUNTER_INC operation with xhr_polling text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.increment sends COUNTER_INC operation with binary protocol" time="5.483" 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.224" 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.821" 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.937" 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.919" 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 xhr_polling binary protocol" time="5.464" classname="LiveCounter.decrement sends COUNTER_INC operation with xhr_polling binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.decrement sends COUNTER_INC operation with xhr_polling text protocol" time="4.923" classname="LiveCounter.decrement sends COUNTER_INC operation with xhr_polling text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.decrement sends COUNTER_INC operation with binary protocol" time="5.054" 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="5.612" 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="1.397" 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.000" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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.000" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with primitive values with xhr_polling binary protocol" time="60.000" classname="LiveMap.set sends MAP_SET operation with primitive values with xhr_polling 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with primitive values with xhr_polling text protocol" time="60.000" classname="LiveMap.set sends MAP_SET operation with primitive values with xhr_polling 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with primitive values with binary protocol" time="60.001" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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="3.598" 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="2.534" 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 xhr_polling binary protocol" time="2.288" classname="LiveMap.set sends MAP_SET operation with reference to another LiveObject with xhr_polling binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with reference to another LiveObject with xhr_polling text protocol" time="2.167" classname="LiveMap.set sends MAP_SET operation with reference to another LiveObject with xhr_polling 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="2.282" 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="2.047" 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="1.348" 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.543" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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="1.471" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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 xhr_polling binary protocol" time="1.198" classname="LiveMap.remove sends MAP_REMOVE operation with xhr_polling 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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 xhr_polling text protocol" time="1.309" classname="LiveMap.remove sends MAP_REMOVE operation with xhr_polling 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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.572" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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.995" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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="1.359" 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="2.028" 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.424" 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 xhr_polling binary protocol" time="1.611" classname="Objects.createCounter sends COUNTER_CREATE operation with xhr_polling binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter sends COUNTER_CREATE operation with xhr_polling text protocol" time="1.015" classname="Objects.createCounter sends COUNTER_CREATE operation with xhr_polling text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter sends COUNTER_CREATE operation with binary protocol" time="1.475" 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.489" 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.283" 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.798" 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 xhr_polling binary protocol" time="1.155" classname="LiveCounter created with Objects.createCounter can be assigned to the object tree with xhr_polling binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter created with Objects.createCounter can be assigned to the object tree with xhr_polling text protocol" time="1.643" classname="LiveCounter created with Objects.createCounter can be assigned to the object tree with xhr_polling 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="1.861" 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="1.827" 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.898" 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="1.219" 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="1.219" 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 xhr_polling binary protocol" time="1.136" classname="Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with xhr_polling binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with xhr_polling text protocol" time="0.914" classname="Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with xhr_polling 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="1.296" 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.741" 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="1.315" 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.679" 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="1.882" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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.439" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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 xhr_polling binary protocol" time="1.024" classname="Objects.createMap sends MAP_CREATE operation with primitive values with xhr_polling 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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 xhr_polling text protocol" time="1.539" classname="Objects.createMap sends MAP_CREATE operation with primitive values with xhr_polling 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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.852" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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.804" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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="1.888" 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="1.966" 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 xhr_polling binary protocol" time="1.155" classname="Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with xhr_polling binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with xhr_polling text protocol" time="1.296" classname="Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with xhr_polling 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.570" 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="1.695" 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="2.353" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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="2.539" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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 xhr_polling binary protocol" time="1.826" classname="LiveMap created with Objects.createMap can be assigned to the object tree with xhr_polling 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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 xhr_polling text protocol" time="2.059" classname="LiveMap created with Objects.createMap can be assigned to the object tree with xhr_polling 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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="2.416" 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 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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 text protocol" time="2.306" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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.834" 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:XwJzGUYLP31T7MHc4iagEj-IDakzWefwd4GYxP6Sfa4@1746191383384 on key=foo" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:XwJzGUYLP31T7MHc4iagEj-IDakzWefwd4GYxP6Sfa4@1746191383384 on key=foo
    at _LiveMap._applyMapSet (build/objects.js:1346:13)
    at http://localhost:3000/build/objects.js:1295:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (build/objects.js:1289:74)
    at _LiveMap.fromObjectOperation (build/objects.js:915:9)
    at Objects.createMap (build/objects.js:1827:25)
    at async Object.action (test/realtime/objects.test.js:2969:25)
    at async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562: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.700" 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:LcbEelWpYosCZF-Y0ugDQEUBUEvwaX5mhLYNkJnvnb4@1746191384103 on key=baz" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:LcbEelWpYosCZF-Y0ugDQEUBUEvwaX5mhLYNkJnvnb4@1746191384103 on key=baz
    at _LiveMap._applyMapSet (build/objects.js:1346:13)
    at http://localhost:3000/build/objects.js:1295:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (build/objects.js:1289:74)
    at _LiveMap._applyMapCreate (build/objects.js:1330:17)
    at _LiveMap.applyOperation (build/objects.js:1141:23)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects.handleObjectMessages (build/objects.js:1908:10)
    at _RealtimeChannel.processMessage (build/ably.js:4478:25)
    at async ObjectsHelper.processObjectOperationMessageOnChannel (test/common/modules/objects_helper.js:271:7)]]></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.709" 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:YqC31C98CIxDQk02WLr_0wOu93uCWBuHlj-WlMktba4@1746191384829 on key=baz" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:YqC31C98CIxDQk02WLr_0wOu93uCWBuHlj-WlMktba4@1746191384829 on key=baz
    at _LiveMap._applyMapSet (build/objects.js:1346:13)
    at http://localhost:3000/build/objects.js:1295:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (build/objects.js:1289:74)
    at _LiveMap._applyMapCreate (build/objects.js:1330:17)
    at _LiveMap.applyOperation (build/objects.js:1141:23)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects.handleObjectMessages (build/objects.js:1908:10)
    at _RealtimeChannel.processMessage (build/ably.js:4478:25)
    at async ObjectsHelper.processObjectOperationMessageOnChannel (test/common/modules/objects_helper.js:271:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap can return LiveMap with initial value from applied CREATE operation with xhr_polling binary protocol" time="0.695" classname="Objects.createMap can return LiveMap with initial value from applied CREATE operation with xhr_polling binary protocol">
      <failure message="Invalid object data for MAP_SET op on objectId=map:HGD-kFRICz5Lq9dsehRv9EE9fz60nQuDGXlHCe3oxVE@1746191385625 on key=baz" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:HGD-kFRICz5Lq9dsehRv9EE9fz60nQuDGXlHCe3oxVE@1746191385625 on key=baz
    at _LiveMap._applyMapSet (build/objects.js:1346:13)
    at http://localhost:3000/build/objects.js:1295:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (build/objects.js:1289:74)
    at _LiveMap._applyMapCreate (build/objects.js:1330:17)
    at _LiveMap.applyOperation (build/objects.js:1141:23)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects.handleObjectMessages (build/objects.js:1908:10)
    at _RealtimeChannel.processMessage (build/ably.js:4478:25)
    at async ObjectsHelper.processObjectOperationMessageOnChannel (test/common/modules/objects_helper.js:271:7)]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap can return LiveMap with initial value from applied CREATE operation with xhr_polling text protocol" time="0.412" classname="Objects.createMap can return LiveMap with initial value from applied CREATE operation with xhr_polling text protocol">
      <failure message="Invalid object data for MAP_SET op on objectId=map:IpobsjZpssf2kJ_NYBC03tkuehrfU93RujHAmB4Lfpw@1746191386053 on key=baz" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:IpobsjZpssf2kJ_NYBC03tkuehrfU93RujHAmB4Lfpw@1746191386053 on key=baz
    at _LiveMap._applyMapSet (build/objects.js:1346:13)
    at http://localhost:3000/build/objects.js:1295:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (build/objects.js:1289:74)
    at _LiveMap._applyMapCreate (build/objects.js:1330:17)
    at _LiveMap.applyOperation (build/objects.js:1141:23)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects.handleObjectMessages (build/objects.js:1908:10)
    at _RealtimeChannel.processMessage (build/ably.js:4478:25)
    at async ObjectsHelper.processObjectOperationMessageOnChannel (test/common/modules/objects_helper.js:271:7)]]></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.711" 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:6e4fAH0ETHi-69DKjHTaZ3Q4VQrmSkFXw3iQbg8a2vA@1746191386692 on key=baz" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:6e4fAH0ETHi-69DKjHTaZ3Q4VQrmSkFXw3iQbg8a2vA@1746191386692 on key=baz
    at _LiveMap._applyMapSet (build/objects.js:1346:13)
    at http://localhost:3000/build/objects.js:1295:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (build/objects.js:1289:74)
    at _LiveMap._applyMapCreate (build/objects.js:1330:17)
    at _LiveMap.applyOperation (build/objects.js:1141:23)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects.handleObjectMessages (build/objects.js:1908:10)
    at _RealtimeChannel.processMessage (build/ably.js:4478:25)
    at async ObjectsHelper.processObjectOperationMessageOnChannel (test/common/modules/objects_helper.js:271:7)]]></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.702" 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:pkBMObb2kgHcM-Pio2C5Tw3pd2588VEddsFa1azioYA@1746191387408 on key=baz" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:pkBMObb2kgHcM-Pio2C5Tw3pd2588VEddsFa1azioYA@1746191387408 on key=baz
    at _LiveMap._applyMapSet (build/objects.js:1346:13)
    at http://localhost:3000/build/objects.js:1295:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (build/objects.js:1289:74)
    at _LiveMap._applyMapCreate (build/objects.js:1330:17)
    at _LiveMap.applyOperation (build/objects.js:1141:23)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects.handleObjectMessages (build/objects.js:1908:10)
    at _RealtimeChannel.processMessage (build/ably.js:4478:25)
    at async ObjectsHelper.processObjectOperationMessageOnChannel (test/common/modules/objects_helper.js:271:7)]]></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="1.303" 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:6uvYsfrAx6A-6xNafwTQInZbED8S8e3j4_zbcf5lsvc@1746191388722 on key=foo" type="Error"><![CDATA[Error: Invalid object data for MAP_SET op on objectId=map:6uvYsfrAx6A-6xNafwTQInZbED8S8e3j4_zbcf5lsvc@1746191388722 on key=foo
    at _LiveMap._applyMapSet (build/objects.js:1346:13)
    at http://localhost:3000/build/objects.js:1295:23
    at Array.forEach (<anonymous>)
    at _LiveMap._mergeInitialDataFromCreateOperation (build/objects.js:1289:74)
    at _LiveMap.fromObjectOperation (build/objects.js:915:9)
    at Objects.createMap (build/objects.js:1827:25)
    at async Object.action (test/realtime/objects.test.js:3021:25)
    at async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap throws on invalid input" time="1.068" classname="Objects.createMap throws on invalid input">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API getRoot method is synchronous" time="0.676" 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.897" 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.864" 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 http://localhost:3000/test/realtime/objects.test.js:3169:44
    at Objects.batch (build/objects.js:1804:7)
    at async Object.action (test/realtime/objects.test.js:3160:13)
    at async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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.877" 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 http://localhost:3000/test/realtime/objects.test.js:3226:44
    at Objects.batch (build/objects.js:1804:7)
    at async Object.action (test/realtime/objects.test.js:3202:13)
    at async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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="3.371" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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="3.316" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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 xhr_polling binary protocol" time="2.861" classname="batch API scheduled operations are applied when batch callback is finished with xhr_polling 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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 xhr_polling text protocol" time="3.348" classname="batch API scheduled operations are applied when batch callback is finished with xhr_polling 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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="3.325" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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="3.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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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.687" 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="2.281" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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.813" 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="2.916" 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="1.053" 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 async http://localhost:3000/test/realtime/objects.test.js:3569:13
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async http://localhost:3000/test/realtime/objects.test.js:3562:11
    at async 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="1.143" 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="1.862" 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="1.485" 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 xhr_polling binary protocol" time="1.164" classname="can subscribe to the incoming COUNTER_INC operation on a LiveCounter with xhr_polling binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming COUNTER_INC operation on a LiveCounter with xhr_polling text protocol" time="1.125" classname="can subscribe to the incoming COUNTER_INC operation on a LiveCounter with xhr_polling 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="1.775" 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="2.024" 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="2.330" 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.858" 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 xhr_polling binary protocol" time="2.008" classname="can subscribe to multiple incoming operations on a LiveCounter with xhr_polling binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveCounter with xhr_polling text protocol" time="1.824" classname="can subscribe to multiple incoming operations on a LiveCounter with xhr_polling text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveCounter with binary protocol" time="2.439" 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.831" 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.001" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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.000" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_SET operation on a LiveMap with xhr_polling binary protocol" time="60.001" classname="can subscribe to the incoming MAP_SET operation on a LiveMap with xhr_polling 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_SET operation on a LiveMap with xhr_polling text protocol" time="60.000" classname="can subscribe to the incoming MAP_SET operation on a LiveMap with xhr_polling 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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.677" 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="2.395" 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 xhr_polling binary protocol" time="2.145" classname="can subscribe to the incoming MAP_REMOVE operation on a LiveMap with xhr_polling binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_REMOVE operation on a LiveMap with xhr_polling text protocol" time="1.467" classname="can subscribe to the incoming MAP_REMOVE operation on a LiveMap with xhr_polling 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.381" 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="2.284" 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="2.491" 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 (build/ably.js:1725:14)
    at http://localhost:3000/build/ably.js:1879:7
    at Array.forEach (<anonymous>)
    at EventEmitter.emit (build/ably.js:1878:15)
    at _LiveMap.notifyUpdated (build/objects.js:476:25)
    at _LiveMap.applyOperation (build/objects.js:1169:10)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects.handleObjectMessages (build/objects.js:1908:10)
    at _RealtimeChannel.processMessage (build/ably.js:4478:25)

      + 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="2.367" 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 (build/ably.js:1725:14)
    at http://localhost:3000/build/ably.js:1879:7
    at Array.forEach (<anonymous>)
    at EventEmitter.emit (build/ably.js:1878:15)
    at _LiveMap.notifyUpdated (build/objects.js:476:25)
    at _LiveMap.applyOperation (build/objects.js:1169:10)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects.handleObjectMessages (build/objects.js:1908:10)
    at _RealtimeChannel.processMessage (build/ably.js:4478:25)

      + 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 xhr_polling binary protocol" time="2.533" classname="can subscribe to multiple incoming operations on a LiveMap with xhr_polling 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 (build/ably.js:1725:14)
    at http://localhost:3000/build/ably.js:1879:7
    at Array.forEach (<anonymous>)
    at EventEmitter.emit (build/ably.js:1878:15)
    at _LiveMap.notifyUpdated (build/objects.js:476:25)
    at _LiveMap.applyOperation (build/objects.js:1169:10)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects.handleObjectMessages (build/objects.js:1908:10)
    at _RealtimeChannel.processMessage (build/ably.js:4478:25)

      + 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 xhr_polling text protocol" time="2.094" classname="can subscribe to multiple incoming operations on a LiveMap with xhr_polling 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 (build/ably.js:1725:14)
    at http://localhost:3000/build/ably.js:1879:7
    at Array.forEach (<anonymous>)
    at EventEmitter.emit (build/ably.js:1878:15)
    at _LiveMap.notifyUpdated (build/objects.js:476:25)
    at _LiveMap.applyOperation (build/objects.js:1169:10)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects.handleObjectMessages (build/objects.js:1908:10)
    at _RealtimeChannel.processMessage (build/ably.js:4478:25)

      + 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="2.686" 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 (build/ably.js:1725:14)
    at http://localhost:3000/build/ably.js:1879:7
    at Array.forEach (<anonymous>)
    at EventEmitter.emit (build/ably.js:1878:15)
    at _LiveMap.notifyUpdated (build/objects.js:476:25)
    at _LiveMap.applyOperation (build/objects.js:1169:10)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects.handleObjectMessages (build/objects.js:1908:10)
    at _RealtimeChannel.processMessage (build/ably.js:4478:25)

      + 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="2.187" 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 (build/ably.js:1725:14)
    at http://localhost:3000/build/ably.js:1879:7
    at Array.forEach (<anonymous>)
    at EventEmitter.emit (build/ably.js:1878:15)
    at _LiveMap.notifyUpdated (build/objects.js:476:25)
    at _LiveMap.applyOperation (build/objects.js:1169:10)
    at Objects._applyObjectMessages (build/objects.js:2056:59)
    at Objects.handleObjectMessages (build/objects.js:1908:10)
    at _RealtimeChannel.processMessage (build/ably.js:4478:25)

      + 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="2.084" 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="1.972" 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.471" 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.001" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can unsubscribe from LiveMap updates via LiveMap.unsubscribe() call" time="60.001" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can remove all LiveMap update listeners via LiveMap.unsubscribeAll() call" time="60.000" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin tombstoned object is removed from the pool after the GC grace period" time="1.586" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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.001" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin tombstoned map entry is removed from the LiveMap after the GC grace period with xhr_polling binary protocol" time="60.000" classname="tombstoned map entry is removed from the LiveMap after the GC grace period with xhr_polling 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin tombstoned map entry is removed from the LiveMap after the GC grace period with xhr_polling text protocol" time="60.001" classname="tombstoned map entry is removed from the LiveMap after the GC grace period with xhr_polling 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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.001" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></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.001" 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." type="Error"><![CDATA[Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin public API throws missing object modes error when attached without correct modes" time="3.342" 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.433" 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="3.101" 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="2.453" 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="2.822" 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="1.141" 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 async http://localhost:3000/test/realtime/objects.test.js:4511:25
    at async SharedHelper.monitorConnectionThenCloseAndFinishAsync (test/common/modules/shared_helper.js:519:9)
    at async Context.<anonymous> (test/realtime/objects.test.js:4480:9)]]></failure>
    </testcase>
  </testsuite>
  <testsuite name="ObjectMessage message size" timestamp="2025-05-02T13:26:40" tests="19" time="6.681" failures="8">
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size client id" time="0.001" 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.000" 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 http://localhost:3000/test/realtime/objects.test.js:4739:56
    at Context.<anonymous> (test/realtime/objects.test.js:57:17)

      + 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 http://localhost:3000/test/realtime/objects.test.js:4739:56
    at Context.<anonymous> (test/realtime/objects.test.js:57:17)

      + 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 http://localhost:3000/test/realtime/objects.test.js:4739:56
    at Context.<anonymous> (test/realtime/objects.test.js:57:17)

      + expected - actual

      -5
      +6
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map remove op" time="0.001" 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 http://localhost:3000/test/realtime/objects.test.js:4739:56
    at Context.<anonymous> (test/realtime/objects.test.js:57:17)

      + 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 http://localhost:3000/test/realtime/objects.test.js:4739:56
    at Context.<anonymous> (test/realtime/objects.test.js:57:17)

      + 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 http://localhost:3000/test/realtime/objects.test.js:4739:56
    at Context.<anonymous> (test/realtime/objects.test.js:57:17)

      + 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 http://localhost:3000/test/realtime/objects.test.js:4739:56
    at Context.<anonymous> (test/realtime/objects.test.js:57:17)

      + 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 http://localhost:3000/test/realtime/objects.test.js:4739:56
    at Context.<anonymous> (test/realtime/objects.test.js:57:17)

      + 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>