<testsuites name="Mocha Tests" time="3284.734" tests="272" failures="142">
  <testsuite name="Root Suite" timestamp="2025-05-02T12:29:15" tests="0" time="0.000" failures="0">
  </testsuite>
  <testsuite name="realtime/objects" timestamp="2025-05-02T12:29:15" tests="1" time="0.000" failures="0">
    <testcase name="realtime/objects can attach to channel with Objects modes" time="0.108" classname="can attach to channel with Objects modes">
    </testcase>
  </testsuite>
  <testsuite name="Realtime without Objects plugin" timestamp="2025-05-02T12:29:21" tests="3" time="0.315" failures="0">
    <testcase name="realtime/objects Realtime without Objects plugin throws an error when attempting to access the channel&apos;s `objects` property" time="0.002" classname="throws an error when attempting to access the channel&apos;s `objects` property">
    </testcase>
    <testcase name="realtime/objects Realtime without Objects plugin doesn&apos;t break when it receives an OBJECT ProtocolMessage" time="0.205" 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.090" 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:22" 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.096" classname="getRoot() returns LiveMap instance">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin getRoot() returns LiveObject with id &quot;root&quot;" time="0.113" 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.055" 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.049" 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.047" 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.064" 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[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
@http://localhost:3000/build/objects.js:1295:35
forEach@[native code]
_mergeInitialDataFromCreateOperation@http://localhost:3000/build/objects.js:1289:81
overrideWithObjectState@http://localhost:3000/build/objects.js:1224:50
_applySync@http://localhost:3000/build/objects.js:2015:62
_endSync@http://localhost:3000/build/objects.js:1984:20
handleObjectSyncMessages@http://localhost:3000/build/objects.js:1897:20
@http://localhost:3000/build/ably.js:4480:49]]></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.005" 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[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.006" 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[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.005" 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[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.005" 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[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[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[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[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[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[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.001" 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[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.001" 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[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[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.001" 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[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[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.001" 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[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.001" 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[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.002" 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[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.001" 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[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.002" 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[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.001" 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[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.001" 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[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.002" 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[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[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.001" 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[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.147" 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[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
@http://localhost:3000/build/objects.js:1295:35
forEach@[native code]
_mergeInitialDataFromCreateOperation@http://localhost:3000/build/objects.js:1289:81
overrideWithObjectState@http://localhost:3000/build/objects.js:1224:50
_applySync@http://localhost:3000/build/objects.js:2015:62
_endSync@http://localhost:3000/build/objects.js:1984:20
handleObjectSyncMessages@http://localhost:3000/build/objects.js:1897:20
@http://localhost:3000/build/ably.js:4480:49]]></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="0.775" 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[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
@http://localhost:3000/build/objects.js:1295:35
forEach@[native code]
_mergeInitialDataFromCreateOperation@http://localhost:3000/build/objects.js:1289:81
overrideWithObjectState@http://localhost:3000/build/objects.js:1224:50
_applySync@http://localhost:3000/build/objects.js:2015:62
_endSync@http://localhost:3000/build/objects.js:1984:20
handleObjectSyncMessages@http://localhost:3000/build/objects.js:1897:20
@http://localhost:3000/build/ably.js:4480:49]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with web_socket text protocol" time="0.372" 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[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
@http://localhost:3000/build/objects.js:1295:35
forEach@[native code]
_mergeInitialDataFromCreateOperation@http://localhost:3000/build/objects.js:1289:81
overrideWithObjectState@http://localhost:3000/build/objects.js:1224:50
_applySync@http://localhost:3000/build/objects.js:2015:62
_endSync@http://localhost:3000/build/objects.js:1984:20
handleObjectSyncMessages@http://localhost:3000/build/objects.js:1897:20
@http://localhost:3000/build/ably.js:4480:49]]></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.771" 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[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
@http://localhost:3000/build/objects.js:1295:35
forEach@[native code]
_mergeInitialDataFromCreateOperation@http://localhost:3000/build/objects.js:1289:81
overrideWithObjectState@http://localhost:3000/build/objects.js:1224:50
_applySync@http://localhost:3000/build/objects.js:2015:62
_endSync@http://localhost:3000/build/objects.js:1984:20
handleObjectSyncMessages@http://localhost:3000/build/objects.js:1897:20
@http://localhost:3000/build/ably.js:4480:49]]></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="0.393" 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[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
@http://localhost:3000/build/objects.js:1295:35
forEach@[native code]
_mergeInitialDataFromCreateOperation@http://localhost:3000/build/objects.js:1289:81
overrideWithObjectState@http://localhost:3000/build/objects.js:1224:50
_applySync@http://localhost:3000/build/objects.js:2015:62
_endSync@http://localhost:3000/build/objects.js:1984:20
handleObjectSyncMessages@http://localhost:3000/build/objects.js:1897:20
@http://localhost:3000/build/ably.js:4480:49]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with binary protocol" time="0.824" 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[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
@http://localhost:3000/build/objects.js:1295:35
forEach@[native code]
_mergeInitialDataFromCreateOperation@http://localhost:3000/build/objects.js:1289:81
overrideWithObjectState@http://localhost:3000/build/objects.js:1224:50
_applySync@http://localhost:3000/build/objects.js:2015:62
_endSync@http://localhost:3000/build/objects.js:1984:20
handleObjectSyncMessages@http://localhost:3000/build/objects.js:1897:20
@http://localhost:3000/build/ably.js:4480:49]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with text protocol" time="0.365" 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[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
@http://localhost:3000/build/objects.js:1295:35
forEach@[native code]
_mergeInitialDataFromCreateOperation@http://localhost:3000/build/objects.js:1289:81
overrideWithObjectState@http://localhost:3000/build/objects.js:1224:50
_applySync@http://localhost:3000/build/objects.js:2015:62
_endSync@http://localhost:3000/build/objects.js:1984:20
handleObjectSyncMessages@http://localhost:3000/build/objects.js:1897:20
@http://localhost:3000/build/ably.js:4480:49]]></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.376" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with web_socket text protocol" time="0.389" 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="0.352" 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="0.221" 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="0.432" 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.751" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with primitives object operation messages with web_socket binary protocol" time="0.788" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:876:45
forEach@[native code]
@http://localhost:3000/test/realtime/objects.test.js:867:42

      + expected - actual

      -0
      +10
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with primitives object operation messages with web_socket text protocol" time="0.383" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:876:45
forEach@[native code]
@http://localhost:3000/test/realtime/objects.test.js:867:42

      + 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="0.888" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:876:45
forEach@[native code]
@http://localhost:3000/test/realtime/objects.test.js:867:42

      + 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="0.245" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:876:45
forEach@[native code]
@http://localhost:3000/test/realtime/objects.test.js:867:42

      + expected - actual

      -0
      +10
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with primitives object operation messages with binary protocol" time="0.753" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:876:45
forEach@[native code]
@http://localhost:3000/test/realtime/objects.test.js:867:42

      + 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.822" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:876:45
forEach@[native code]
@http://localhost:3000/test/realtime/objects.test.js:867:42

      + 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.300" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:968:50

      + 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="0.889" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:968:50

      + 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="0.441" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:968:50

      + 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="0.907" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:968:50

      + 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.074" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:968:50

      + 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="0.822" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:968:50

      + 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.149" 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:3914251973016951@1746190417906 on key=foo" type="Error"><![CDATA[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
applyOperation@http://localhost:3000/build/objects.js:1148:37
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
handleObjectMessages@http://localhost:3000/build/objects.js:1908:30
@http://localhost:3000/build/ably.js:4478:45]]></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.005" 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[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.006" classname="can apply MAP_SET with primitives object operation messages with web_socket text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves." type="Error"><![CDATA[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.006" 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[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.005" 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[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.001" 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[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.001" 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[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="0.853" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:1157:40

      + 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="0.851" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:1157:40

      + 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="0.306" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:1157:40

      + 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.518" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:1157:40

      + 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="0.822" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:1157:40

      + expected - actual

      -0
      +1
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with object ids object operation messages with text protocol" time="0.941" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:1157:40

      + expected - actual

      -0
      +1
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin MAP_SET object operation messages are applied based on the site timeserials vector of the object" time="0.167" 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:04573599899236669@1746190782568 on key=foo1" type="Error"><![CDATA[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
@http://localhost:3000/build/objects.js:1295:35
forEach@[native code]
_mergeInitialDataFromCreateOperation@http://localhost:3000/build/objects.js:1289:81
applyOperation@http://localhost:3000/build/objects.js:1141:38
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
handleObjectMessages@http://localhost:3000/build/objects.js:1908:30
@http://localhost:3000/build/ably.js:4478:45]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_REMOVE object operation messages with web_socket binary protocol" time="0.222" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:1257:40

      + 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.728" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:1257:40

      + 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.763" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:1257:40

      + 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.232" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:1257:40

      + 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.731" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:1257:40

      + expected - actual

      -0
      +2
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_REMOVE object operation messages with text protocol" time="0.832" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:1257:40

      + expected - actual

      -0
      +2
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin MAP_REMOVE object operation messages are applied based on the site timeserials vector of the object" time="0.273" 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:7687202874912215@1746190786416 on key=foo1" type="Error"><![CDATA[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
@http://localhost:3000/build/objects.js:1295:35
forEach@[native code]
_mergeInitialDataFromCreateOperation@http://localhost:3000/build/objects.js:1289:81
applyOperation@http://localhost:3000/build/objects.js:1141:38
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
handleObjectMessages@http://localhost:3000/build/objects.js:1908:30
@http://localhost:3000/build/ably.js:4478:45]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_CREATE object operation messages with web_socket binary protocol" time="0.819" 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.357" 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="0.943" 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="0.485" 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="0.314" classname="can apply COUNTER_CREATE object operation messages with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_CREATE object operation messages with text protocol" time="0.836" 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.271" 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="0.718" 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="0.813" 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="1.309" 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="0.751" 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="0.835" 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="0.802" classname="can apply COUNTER_INC object operation messages with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin COUNTER_INC object operation messages are applied based on the site timeserials vector of the object" time="0.269" classname="COUNTER_INC object operation messages are applied based on the site timeserials vector of the object">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply OBJECT_DELETE object operation messages" time="0.447" 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.142" 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.715" classname="OBJECT_DELETE object operation messages are applied based on the site timeserials vector of the object">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_DELETE triggers subscription callback with deleted data" time="0.461" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:1781:47
callListener@http://localhost:3000/build/ably.js:1725:19
@http://localhost:3000/build/ably.js:1879:19
forEach@[native code]
emit@http://localhost:3000/build/ably.js:1878:22
notifyUpdated@http://localhost:3000/build/objects.js:476:29
applyOperation@http://localhost:3000/build/objects.js:1169:23
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
handleObjectMessages@http://localhost:3000/build/objects.js:1908:30
@http://localhost:3000/build/ably.js:4478:45

      + 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.782" classname="MAP_SET with reference to a tombstoned object results in undefined value on key">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin object operation message on a tombstoned object does not revive it" time="0.575" classname="object operation message on a tombstoned object does not revive it">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin object operation messages are buffered during OBJECT_SYNC sequence" time="0.847" classname="object operation messages are buffered during OBJECT_SYNC sequence">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin buffered object operation messages are applied when OBJECT_SYNC sequence ends" time="0.671" 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[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
applyOperation@http://localhost:3000/build/objects.js:1148:37
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
_endSync@http://localhost:3000/build/objects.js:1985:30
handleObjectSyncMessages@http://localhost:3000/build/objects.js:1897:20
@http://localhost:3000/build/ably.js:4480:49]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin buffered object operation messages are discarded when new OBJECT_SYNC sequence starts" time="0.142" 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[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
applyOperation@http://localhost:3000/build/objects.js:1148:37
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
_endSync@http://localhost:3000/build/objects.js:1985:30
handleObjectSyncMessages@http://localhost:3000/build/objects.js:1897:20
@http://localhost:3000/build/ably.js:4480:49]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin buffered object operation messages are applied based on the site timeserials vector of the object" time="0.733" 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:09422244767397825@1746190801617 on key=foo5" type="Error"><![CDATA[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
applyOperation@http://localhost:3000/build/objects.js:1148:37
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
_endSync@http://localhost:3000/build/objects.js:1985:30
handleObjectSyncMessages@http://localhost:3000/build/objects.js:1897:20
@http://localhost:3000/build/ably.js:4480:49]]></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.155" 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[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
applyOperation@http://localhost:3000/build/objects.js:1148:37
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
_endSync@http://localhost:3000/build/objects.js:1985:30
handleObjectSyncMessages@http://localhost:3000/build/objects.js:1897:20
@http://localhost:3000/build/ably.js:4480:49]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.increment sends COUNTER_INC operation with web_socket binary protocol" time="4.333" classname="LiveCounter.increment sends COUNTER_INC operation with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.increment sends COUNTER_INC operation with web_socket text protocol" time="4.762" 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="4.856" 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.774" 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="4.748" 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="4.816" 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.312" 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.813" 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.257" 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="4.399" 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.451" 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="4.279" classname="LiveCounter.decrement sends COUNTER_INC operation with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.decrement sends COUNTER_INC operation with text protocol" time="4.222" classname="LiveCounter.decrement sends COUNTER_INC operation with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.decrement throws on invalid input" time="0.369" classname="LiveCounter.decrement throws on invalid input">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with primitive values with web_socket binary protocol" time="60.005" classname="LiveMap.set sends MAP_SET operation with primitive values with web_socket binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves." type="Error"><![CDATA[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.002" 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[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.001" 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[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.002" 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[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[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[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="1.059" classname="LiveMap.set sends MAP_SET operation with reference to another LiveObject with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with reference to another LiveObject with web_socket text protocol" time="0.810" 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="1.027" 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="1.446" 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="1.009" classname="LiveMap.set sends MAP_SET operation with reference to another LiveObject with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with reference to another LiveObject with text protocol" time="0.970" classname="LiveMap.set sends MAP_SET operation with reference to another LiveObject with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set throws on invalid input" time="0.342" 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.318" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:2642:23

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.remove sends MAP_REMOVE operation with web_socket text protocol" time="0.741" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:2642:23

      + 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="0.914" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:2642:23

      + 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="0.838" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:2642:23

      + 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.355" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:2642:23

      + 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.252" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:2642:23

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.remove throws on invalid input" time="0.345" 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="1.262" 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="0.875" 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="0.836" 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.238" 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.271" 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="0.822" 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.188" 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="0.772" 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="0.846" 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.308" 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.294" classname="LiveCounter created with Objects.createCounter can be assigned to the object tree with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter created with Objects.createCounter can be assigned to the object tree with text protocol" time="0.796" 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.781" classname="Objects.createCounter can return LiveCounter with initial value without applying CREATE operation">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with web_socket binary protocol" time="0.685" classname="Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with web_socket text protocol" time="0.285" 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="0.164" 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.167" 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="0.186" 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.776" classname="Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin initial value is not double counted for LiveCounter from Objects.createCounter when CREATE op is received" time="0.766" 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.668" classname="Objects.createCounter throws on invalid input">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with primitive values with web_socket binary protocol" time="0.692" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:2865:42

      + 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.219" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:2865:42

      + 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.350" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:2865:42

      + 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="0.860" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:2865:42

      + 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="0.700" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:2865:42

      + 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="0.321" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:2865:42

      + expected - actual

      -0
      +10
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with web_socket binary protocol" time="0.516" classname="Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with web_socket text protocol" time="0.465" 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.013" 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="0.507" 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="0.538" classname="Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with text protocol" time="0.487" classname="Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap created with Objects.createMap can be assigned to the object tree with web_socket binary protocol" time="1.298" 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 +0 to equal 2" type="AssertionError"><![CDATA[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:2945:52

      + expected - actual

      -0
      +2
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap created with Objects.createMap can be assigned to the object tree with web_socket text protocol" time="1.754" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:2945:52

      + 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.827" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:2945:52

      + 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="1.205" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:2945:52

      + expected - actual

      -1
      +2
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap created with Objects.createMap can be assigned to the object tree with binary protocol" time="1.187" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:2945:52

      + 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="1.319" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:2945:52

      + 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.303" 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:ekIkIoqxOAs7bJaxpyRppxzGOxACi0QzbSwcWIPrwQc@1746191265608 on key=foo" type="Error"><![CDATA[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
@http://localhost:3000/build/objects.js:1295:35
forEach@[native code]
_mergeInitialDataFromCreateOperation@http://localhost:3000/build/objects.js:1289:81
fromObjectOperation@http://localhost:3000/build/objects.js:915:45
@http://localhost:3000/build/objects.js:1827:44]]></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.169" 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:CN52uR35iDD2vBEPJpCp6ZZwyiC9UtFb2AfSAoNhMVs@1746191265782 on key=baz" type="Error"><![CDATA[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
@http://localhost:3000/build/objects.js:1295:35
forEach@[native code]
_mergeInitialDataFromCreateOperation@http://localhost:3000/build/objects.js:1289:81
applyOperation@http://localhost:3000/build/objects.js:1141:38
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
handleObjectMessages@http://localhost:3000/build/objects.js:1908:30
@http://localhost:3000/build/ably.js:4478:45]]></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.706" 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:w0LWbztA_EOZ58TnTgmL6EMSzk9sFgsJKC1cOyZ5d_k@1746191266499 on key=baz" type="Error"><![CDATA[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
@http://localhost:3000/build/objects.js:1295:35
forEach@[native code]
_mergeInitialDataFromCreateOperation@http://localhost:3000/build/objects.js:1289:81
applyOperation@http://localhost:3000/build/objects.js:1141:38
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
handleObjectMessages@http://localhost:3000/build/objects.js:1908:30
@http://localhost:3000/build/ably.js:4478:45]]></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.715" 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:P3bdKZH7cB5uD6J4PICbmSg0V3rY2_ioFM32sQvDzWw@1746191267229 on key=baz" type="Error"><![CDATA[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
@http://localhost:3000/build/objects.js:1295:35
forEach@[native code]
_mergeInitialDataFromCreateOperation@http://localhost:3000/build/objects.js:1289:81
applyOperation@http://localhost:3000/build/objects.js:1141:38
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
handleObjectMessages@http://localhost:3000/build/objects.js:1908:30
@http://localhost:3000/build/ably.js:4478:45]]></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.746" 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:KB0NGkXpYttL_TDdfHaTQeaoNpok3Ul1IQ_V6CVwU9c@1746191267983 on key=baz" type="Error"><![CDATA[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
@http://localhost:3000/build/objects.js:1295:35
forEach@[native code]
_mergeInitialDataFromCreateOperation@http://localhost:3000/build/objects.js:1289:81
applyOperation@http://localhost:3000/build/objects.js:1141:38
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
handleObjectMessages@http://localhost:3000/build/objects.js:1908:30
@http://localhost:3000/build/ably.js:4478:45]]></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.694" 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:ra9RXByzTWGfdAHattcMVYHsnuSzkp1eBggryKeIH80@1746191268680 on key=baz" type="Error"><![CDATA[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
@http://localhost:3000/build/objects.js:1295:35
forEach@[native code]
_mergeInitialDataFromCreateOperation@http://localhost:3000/build/objects.js:1289:81
applyOperation@http://localhost:3000/build/objects.js:1141:38
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
handleObjectMessages@http://localhost:3000/build/objects.js:1908:30
@http://localhost:3000/build/ably.js:4478:45]]></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.299" 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:WG8NFrs_DRDNKgYTDjJJ2mUFzTOBYUh8DcJPDYtJkjk@1746191268986 on key=baz" type="Error"><![CDATA[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
@http://localhost:3000/build/objects.js:1295:35
forEach@[native code]
_mergeInitialDataFromCreateOperation@http://localhost:3000/build/objects.js:1289:81
applyOperation@http://localhost:3000/build/objects.js:1141:38
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
handleObjectMessages@http://localhost:3000/build/objects.js:1908:30
@http://localhost:3000/build/ably.js:4478:45]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin initial value is not double counted for LiveMap from Objects.createMap when CREATE op is received" time="0.772" 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:lN7TzfjqjQqM8zkxIv-yv0Jnp3aeZDHUp7z4P2OPdh8@1746191269763 on key=foo" type="Error"><![CDATA[_ErrorInfo@http://localhost:3000/build/ably.js:256:10
_applyMapSet@http://localhost:3000/build/objects.js:1346:26
@http://localhost:3000/build/objects.js:1295:35
forEach@[native code]
_mergeInitialDataFromCreateOperation@http://localhost:3000/build/objects.js:1289:81
fromObjectOperation@http://localhost:3000/build/objects.js:915:45
@http://localhost:3000/build/objects.js:1827:44]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap throws on invalid input" time="0.674" classname="Objects.createMap throws on invalid input">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API getRoot method is synchronous" time="0.770" 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="1.669" 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.240" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:3169:49
@http://localhost:3000/build/objects.js:1804:15

      + 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="1.832" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:3226:49
@http://localhost:3000/build/objects.js:1804: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 binary protocol" time="2.727" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:3263:44

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API scheduled operations are applied when batch callback is finished with web_socket text protocol" time="2.899" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:3263:44

      + 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.355" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:3263:44

      + 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="2.213" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:3263:44

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API scheduled operations are applied when batch callback is finished with binary protocol" time="2.775" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:3263:44

      + expected - actual:  failed to generate Mocha diff
]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API scheduled operations are applied when batch callback is finished with text protocol" time="2.734" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:3263:44

      + 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.667" 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.278" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:3323:44

      + 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.209" classname="batch API batch context and derived objects can&apos;t be interacted with after the batch call">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API batch context and derived objects can&apos;t be interacted with after error was thrown from batch callback" time="1.811" classname="batch API batch context and derived objects can&apos;t be interacted with after error was thrown from batch callback">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap enumeration" time="0.270" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:3467:54

      + expected - actual

           }
         ]
         [
           "foo"
      -    [undefined]
      +    "bar"
         ]
       ]
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin BatchContextLiveMap enumeration" time="0.679" classname="BatchContextLiveMap enumeration">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming COUNTER_INC operation on a LiveCounter with web_socket binary protocol" time="0.331" classname="can subscribe to the incoming COUNTER_INC operation on a LiveCounter with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming COUNTER_INC operation on a LiveCounter with web_socket text protocol" time="0.458" 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="0.902" 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="0.609" 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="0.883" classname="can subscribe to the incoming COUNTER_INC operation on a LiveCounter with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming COUNTER_INC operation on a LiveCounter with text protocol" time="0.892" 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="1.015" 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="0.962" 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="1.077" 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="0.963" 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="0.790" 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="0.519" 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.006" 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[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.001" 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[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.006" 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[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.001" 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[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.001" 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[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[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="0.869" classname="can subscribe to the incoming MAP_REMOVE operation on a LiveMap with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_REMOVE operation on a LiveMap with web_socket text protocol" time="0.958" 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="0.522" 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="0.478" 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="0.879" 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="0.348" classname="can subscribe to the incoming MAP_REMOVE operation on a LiveMap with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveMap with web_socket binary protocol" time="0.684" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:3738:47
callListener@http://localhost:3000/build/ably.js:1725:19
@http://localhost:3000/build/ably.js:1879:19
forEach@[native code]
emit@http://localhost:3000/build/ably.js:1878:22
notifyUpdated@http://localhost:3000/build/objects.js:476:29
applyOperation@http://localhost:3000/build/objects.js:1169:23
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
handleObjectMessages@http://localhost:3000/build/objects.js:1908:30
@http://localhost:3000/build/ably.js:4478:45

      + expected - actual

       {
         "update": {
      -    "foo": "removed"
      +    "foo": "updated"
         }
       }
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveMap with web_socket text protocol" time="0.635" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:3738:47
callListener@http://localhost:3000/build/ably.js:1725:19
@http://localhost:3000/build/ably.js:1879:19
forEach@[native code]
emit@http://localhost:3000/build/ably.js:1878:22
notifyUpdated@http://localhost:3000/build/objects.js:476:29
applyOperation@http://localhost:3000/build/objects.js:1169:23
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
handleObjectMessages@http://localhost:3000/build/objects.js:1908:30
@http://localhost:3000/build/ably.js:4478:45

      + 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="1.187" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:3738:47
callListener@http://localhost:3000/build/ably.js:1725:19
@http://localhost:3000/build/ably.js:1879:19
forEach@[native code]
emit@http://localhost:3000/build/ably.js:1878:22
notifyUpdated@http://localhost:3000/build/objects.js:476:29
applyOperation@http://localhost:3000/build/objects.js:1169:23
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
handleObjectMessages@http://localhost:3000/build/objects.js:1908:30
@http://localhost:3000/build/ably.js:4478:45

      + 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="1.074" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:3738:47
callListener@http://localhost:3000/build/ably.js:1725:19
@http://localhost:3000/build/ably.js:1879:19
forEach@[native code]
emit@http://localhost:3000/build/ably.js:1878:22
notifyUpdated@http://localhost:3000/build/objects.js:476:29
applyOperation@http://localhost:3000/build/objects.js:1169:23
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
handleObjectMessages@http://localhost:3000/build/objects.js:1908:30
@http://localhost:3000/build/ably.js:4478:45

      + 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="0.735" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:3738:47
callListener@http://localhost:3000/build/ably.js:1725:19
@http://localhost:3000/build/ably.js:1879:19
forEach@[native code]
emit@http://localhost:3000/build/ably.js:1878:22
notifyUpdated@http://localhost:3000/build/objects.js:476:29
applyOperation@http://localhost:3000/build/objects.js:1169:23
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
handleObjectMessages@http://localhost:3000/build/objects.js:1908:30
@http://localhost:3000/build/ably.js:4478:45

      + expected - actual

       {
         "update": {
      -    "foo": "removed"
      +    "foo": "updated"
         }
       }
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveMap with text protocol" time="1.070" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:3738:47
callListener@http://localhost:3000/build/ably.js:1725:19
@http://localhost:3000/build/ably.js:1879:19
forEach@[native code]
emit@http://localhost:3000/build/ably.js:1878:22
notifyUpdated@http://localhost:3000/build/objects.js:476:29
applyOperation@http://localhost:3000/build/objects.js:1169:23
_applyObjectMessages@http://localhost:3000/build/objects.js:2056:73
handleObjectMessages@http://localhost:3000/build/objects.js:1908:30
@http://localhost:3000/build/ably.js:4478:45

      + 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="0.430" classname="can unsubscribe from LiveCounter updates via returned &quot;unsubscribe&quot; callback">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can unsubscribe from LiveCounter updates via LiveCounter.unsubscribe() call" time="0.531" 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="0.586" 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.004" 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[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.006" classname="can unsubscribe from LiveMap updates via LiveMap.unsubscribe() call">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves." type="Error"><![CDATA[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.003" classname="can remove all LiveMap update listeners via LiveMap.unsubscribeAll() call">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves." type="Error"><![CDATA[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.015" 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.002" 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[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[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.001" 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[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[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.000" classname="tombstoned map entry is removed from the LiveMap after the GC grace period with binary protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves." type="Error"><![CDATA[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.000" classname="tombstoned map entry is removed from the LiveMap after the GC grace period with text protocol">
      <failure message="Timeout of 60000ms exceeded. For async tests and hooks, ensure &quot;done()&quot; is called; if returning a Promise, ensure it resolves." type="Error"><![CDATA[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="2.314" 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.260" classname="public API throws missing object modes error when not yet attached but client options are missing correct modes">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin public API throws invalid channel state error when channel DETACHED" time="2.312" 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.266" classname="public API throws invalid channel state error when channel FAILED">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin public write API throws invalid channel state error when channel SUSPENDED" time="1.821" classname="public write API throws invalid channel state error when channel SUSPENDED">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin object message publish respects connectionDetails.maxMessageSize" time="0.281" classname="object message publish respects connectionDetails.maxMessageSize">
      <failure message="Expected async function to throw an error: expected undefined to exist" type="AssertionError"><![CDATA[@http://localhost:3000/test/realtime/objects.test.js:85:71]]></failure>
    </testcase>
  </testsuite>
  <testsuite name="ObjectMessage message size" timestamp="2025-05-02T13:23:53" tests="19" time="6.290" failures="8">
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size client id" time="0.000" classname="client id">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size extras" time="0.000" classname="extras">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size object id" time="0.001" 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:4739:61
@http://localhost:3000/test/realtime/objects.test.js:57:23
@http://localhost:3000/test/realtime/objects.test.js:55:60

      + 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.001" classname="map create op with bytes payload">
      <failure message="expected 5 to equal 13" type="AssertionError"><![CDATA[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:4739:61
@http://localhost:3000/test/realtime/objects.test.js:57:23
@http://localhost:3000/test/realtime/objects.test.js:55:60

      + 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:4739:61
@http://localhost:3000/test/realtime/objects.test.js:57:23
@http://localhost:3000/test/realtime/objects.test.js:55:60

      + expected - actual

      -5
      +6
      ]]></failure>
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map remove op" time="0.000" classname="map remove op">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map set operation value=object" time="0.000" classname="map set operation value=object">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map set operation value=string" time="0.000" classname="map set operation value=string">
      <failure message="expected 6 to equal 14" type="AssertionError"><![CDATA[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:4739:61
@http://localhost:3000/test/realtime/objects.test.js:57:23
@http://localhost:3000/test/realtime/objects.test.js:55:60

      + 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:4739:61
@http://localhost:3000/test/realtime/objects.test.js:57:23
@http://localhost:3000/test/realtime/objects.test.js:55:60

      + 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:4739:61
@http://localhost:3000/test/realtime/objects.test.js:57:23
@http://localhost:3000/test/realtime/objects.test.js:55:60

      + 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:4739:61
@http://localhost:3000/test/realtime/objects.test.js:57:23
@http://localhost:3000/test/realtime/objects.test.js:55:60

      + 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[@[native code]
@http://localhost:3000/test/realtime/objects.test.js:4739:61
@http://localhost:3000/test/realtime/objects.test.js:57:23
@http://localhost:3000/test/realtime/objects.test.js:55:60

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