<testsuites name="Mocha Tests" time="255.007" tests="216" failures="13" skipped="12">
  <testsuite name="Root Suite" timestamp="2026-03-11T11:56:39" tests="0" time="0.000" failures="0">
  </testsuite>
  <testsuite name="realtime/annotations" timestamp="2026-03-11T11:56:39" tests="2" file="/home/runner/work/ably-js/ably-js/test/realtime/annotations.test.js" time="6.693" failures="0">
    <testcase name="realtime/annotations publish and subscribe annotations" time="1.577" classname="publish and subscribe annotations">
    </testcase>
    <testcase name="realtime/annotations get all annotations rest request" time="3.873" classname="get all annotations rest request">
    </testcase>
  </testsuite>
  <testsuite name="realtime/api" timestamp="2026-03-11T11:56:45" tests="6" file="/home/runner/work/ably-js/ably-js/test/realtime/api.test.js" time="0.007" failures="0">
    <testcase name="realtime/api Client constructors" time="0.000" classname="Client constructors">
    </testcase>
    <testcase name="realtime/api constructor without any arguments" time="0.001" classname="constructor without any arguments">
    </testcase>
    <testcase name="realtime/api constructor with conflict client options" time="0.003" classname="constructor with conflict client options">
    </testcase>
    <testcase name="realtime/api Crypto" time="0.000" classname="Crypto">
    </testcase>
    <testcase name="realtime/api Message" time="0.000" classname="Message">
    </testcase>
    <testcase name="realtime/api PresenceMessage" time="0.000" classname="PresenceMessage">
    </testcase>
  </testsuite>
  <testsuite name="realtime/auth" timestamp="2026-03-11T11:56:45" tests="84" file="/home/runner/work/ably-js/ably-js/test/realtime/auth.test.js" time="133.866" failures="3">
    <testcase name="realtime/auth authbase0" time="0.136" classname="authbase0">
    </testcase>
    <testcase name="realtime/auth auth_useAuthUrl_json" time="0.679" classname="auth_useAuthUrl_json">
    </testcase>
    <testcase name="realtime/auth auth_useAuthUrl_post_json" time="0.401" classname="auth_useAuthUrl_post_json">
    </testcase>
    <testcase name="realtime/auth auth_useAuthUrl_plainText" time="0.406" classname="auth_useAuthUrl_plainText">
    </testcase>
    <testcase name="realtime/auth auth_useAuthCallback_tokenRequestResponse" time="0.300" classname="auth_useAuthCallback_tokenRequestResponse">
    </testcase>
    <testcase name="realtime/auth auth_useAuthCallback_tokenDetailsResponse" time="0.260" classname="auth_useAuthCallback_tokenDetailsResponse">
    </testcase>
    <testcase name="realtime/auth auth_useAuthCallback_tokenStringResponse" time="0.262" classname="auth_useAuthCallback_tokenStringResponse">
    </testcase>
    <testcase name="realtime/auth auth_useAuthUrl_mixed_authParams_qsParams" time="0.414" classname="auth_useAuthUrl_mixed_authParams_qsParams">
    </testcase>
    <testcase name="realtime/auth auth_clientid_inheritance" time="0.199" classname="auth_clientid_inheritance">
    </testcase>
    <testcase name="realtime/auth auth_clientid_inheritance2" time="0.068" classname="auth_clientid_inheritance2">
    </testcase>
    <testcase name="realtime/auth auth_clientid_inheritance3" time="0.278" classname="auth_clientid_inheritance3">
    </testcase>
    <testcase name="realtime/auth auth_clientid_inheritance4" time="0.201" classname="auth_clientid_inheritance4">
    </testcase>
    <testcase name="realtime/auth auth_clientid_inheritance5" time="0.298" classname="auth_clientid_inheritance5">
    </testcase>
    <testcase name="realtime/auth authCallback_error" time="0.002" classname="authCallback_error">
    </testcase>
    <testcase name="realtime/auth authCallback_timeout" time="0.100" classname="authCallback_timeout">
    </testcase>
    <testcase name="realtime/auth authCallback_nothing" time="0.001" classname="authCallback_nothing">
    </testcase>
    <testcase name="realtime/auth authCallback_malformed" time="0.001" classname="authCallback_malformed">
    </testcase>
    <testcase name="realtime/auth authCallback_too_long_string" time="0.009" classname="authCallback_too_long_string">
    </testcase>
    <testcase name="realtime/auth authCallback_empty_string" time="0.001" classname="authCallback_empty_string">
    </testcase>
    <testcase name="realtime/auth authUrl_timeout" time="0.101" classname="authUrl_timeout">
    </testcase>
    <testcase name="realtime/auth authUrl_404" time="0.023" classname="authUrl_404">
    </testcase>
    <testcase name="realtime/auth authUrl_wrong_content_type" time="0.012" classname="authUrl_wrong_content_type">
    </testcase>
    <testcase name="realtime/auth authUrl_401" time="0.131" classname="authUrl_401">
    </testcase>
    <testcase name="realtime/auth authUrl_double_encoded" time="0.131" classname="authUrl_double_encoded">
    </testcase>
    <testcase name="realtime/auth authUrl_403" time="0.131" classname="authUrl_403">
    </testcase>
    <testcase name="realtime/auth authUrl_403_custom_error" time="0.131" classname="authUrl_403_custom_error">
    </testcase>
    <testcase name="realtime/auth authUrl_403_previously_active" time="0.563" classname="authUrl_403_previously_active">
    </testcase>
    <testcase name="realtime/auth auth_token_expires with web_socket binary protocol" time="5.022" classname="auth_token_expires with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_expires with web_socket text protocol" time="5.023" classname="auth_token_expires with web_socket text protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_expires with comet binary protocol" time="0.211" classname="auth_token_expires with comet binary protocol">
      <failure message="Verify correct disconnect statusCode: expected 410 to equal 401" type="AssertionError"><![CDATA[AssertionError: Verify correct disconnect statusCode: expected 410 to equal 401
    at Object.<anonymous> (test/realtime/auth.test.js:800:58)
    at callListener (src/common/lib/util/eventemitter.ts:8:14)
    at /home/runner/work/ably-js/ably-js/src/common/lib/util/eventemitter.ts:220:7
    at Array.forEach (<anonymous>)
    at Connection.emit (src/common/lib/util/eventemitter.ts:219:15)
    at /home/runner/work/ably-js/ably-js/src/common/lib/client/connection.ts:30:14
    at processTicksAndRejections (node:internal/process/task_queues:78:11)

      + expected - actual

      -410
      +401
      ]]></failure>
    </testcase>
    <testcase name="realtime/auth auth_token_expires with comet text protocol" time="5.026" classname="auth_token_expires with comet text protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_expires with binary protocol" time="5.023" classname="auth_token_expires with binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_expires with text protocol" time="5.022" classname="auth_token_expires with text protocol">
    </testcase>
    <testcase name="realtime/auth auth_query_time_once" time="0.067" classname="auth_query_time_once">
    </testcase>
    <testcase name="realtime/auth auth_tokenDetails_expiry_with_authcallback with web_socket binary protocol" time="5.238" classname="auth_tokenDetails_expiry_with_authcallback with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_tokenDetails_expiry_with_authcallback with web_socket text protocol" time="5.223" classname="auth_tokenDetails_expiry_with_authcallback with web_socket text protocol">
    </testcase>
    <testcase name="realtime/auth auth_tokenDetails_expiry_with_authcallback with comet binary protocol" time="5.165" classname="auth_tokenDetails_expiry_with_authcallback with comet binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_tokenDetails_expiry_with_authcallback with comet text protocol" time="5.167" classname="auth_tokenDetails_expiry_with_authcallback with comet text protocol">
    </testcase>
    <testcase name="realtime/auth auth_tokenDetails_expiry_with_authcallback with binary protocol" time="5.228" classname="auth_tokenDetails_expiry_with_authcallback with binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_tokenDetails_expiry_with_authcallback with text protocol" time="5.220" classname="auth_tokenDetails_expiry_with_authcallback with text protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_authcallback with web_socket binary protocol" time="5.225" classname="auth_token_string_expiry_with_authcallback with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_authcallback with web_socket text protocol" time="5.223" classname="auth_token_string_expiry_with_authcallback with web_socket text protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_authcallback with comet binary protocol" time="5.161" classname="auth_token_string_expiry_with_authcallback with comet binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_authcallback with comet text protocol" time="5.170" classname="auth_token_string_expiry_with_authcallback with comet text protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_authcallback with binary protocol" time="5.220" classname="auth_token_string_expiry_with_authcallback with binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_authcallback with text protocol" time="5.224" classname="auth_token_string_expiry_with_authcallback with text protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_token with web_socket binary protocol" time="5.023" classname="auth_token_string_expiry_with_token with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_token with web_socket text protocol" time="5.022" classname="auth_token_string_expiry_with_token with web_socket text protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_token with comet binary protocol" time="0.205" classname="auth_token_string_expiry_with_token with comet binary protocol">
      <failure message="Verify correct disconnect code: expected 80016 to equal 40142" type="AssertionError"><![CDATA[AssertionError: Verify correct disconnect code: expected 80016 to equal 40142
    at Object.<anonymous> (test/realtime/auth.test.js:998:54)
    at callListener (src/common/lib/util/eventemitter.ts:8:14)
    at /home/runner/work/ably-js/ably-js/src/common/lib/util/eventemitter.ts:220:7
    at Array.forEach (<anonymous>)
    at Connection.emit (src/common/lib/util/eventemitter.ts:219:15)
    at /home/runner/work/ably-js/ably-js/src/common/lib/client/connection.ts:30:14
    at processTicksAndRejections (node:internal/process/task_queues:78:11)

      + expected - actual

      -80016
      +40142
      ]]></failure>
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_token with comet text protocol" time="0.210" classname="auth_token_string_expiry_with_token with comet text protocol">
      <failure message="Verify correct disconnect code: expected 80016 to equal 40142" type="AssertionError"><![CDATA[AssertionError: Verify correct disconnect code: expected 80016 to equal 40142
    at Object.<anonymous> (test/realtime/auth.test.js:998:54)
    at callListener (src/common/lib/util/eventemitter.ts:8:14)
    at /home/runner/work/ably-js/ably-js/src/common/lib/util/eventemitter.ts:220:7
    at Array.forEach (<anonymous>)
    at Connection.emit (src/common/lib/util/eventemitter.ts:219:15)
    at /home/runner/work/ably-js/ably-js/src/common/lib/client/connection.ts:30:14
    at processTicksAndRejections (node:internal/process/task_queues:78:11)

      + expected - actual

      -80016
      +40142
      ]]></failure>
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_token with binary protocol" time="5.023" classname="auth_token_string_expiry_with_token with binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_token with text protocol" time="5.021" classname="auth_token_string_expiry_with_token with text protocol">
    </testcase>
    <testcase name="realtime/auth auth_expired_token_string with web_socket binary protocol" time="0.304" classname="auth_expired_token_string with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_expired_token_string with web_socket text protocol" time="0.303" classname="auth_expired_token_string with web_socket text protocol">
    </testcase>
    <testcase name="realtime/auth auth_expired_token_string with comet binary protocol" time="0.241" classname="auth_expired_token_string with comet binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_expired_token_string with comet text protocol" time="0.242" classname="auth_expired_token_string with comet text protocol">
    </testcase>
    <testcase name="realtime/auth auth_expired_token_string with binary protocol" time="0.300" classname="auth_expired_token_string with binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_expired_token_string with text protocol" time="0.304" classname="auth_expired_token_string with text protocol">
    </testcase>
    <testcase name="realtime/auth authorize_updates_stored_details" time="0.002" classname="authorize_updates_stored_details">
    </testcase>
    <testcase name="realtime/auth mocked_reauth" time="0.326" classname="mocked_reauth">
    </testcase>
    <testcase name="realtime/auth auth_jwt_with_clientid" time="0.545" classname="auth_jwt_with_clientid">
    </testcase>
    <testcase name="realtime/auth auth_jwt_with_clientid_application_jwt" time="0.265" classname="auth_jwt_with_clientid_application_jwt">
    </testcase>
    <testcase name="realtime/auth auth_jwt_with_subscribe_only_capability" time="0.337" classname="auth_jwt_with_subscribe_only_capability">
    </testcase>
    <testcase name="realtime/auth realtime client mirrors the auth clientId" time="0.268" classname="realtime client mirrors the auth clientId">
    </testcase>
    <testcase name="realtime/auth auth_jwt_with_publish_capability" time="0.328" classname="auth_jwt_with_publish_capability">
    </testcase>
    <testcase name="realtime/auth auth_jwt_with_token_that_expires" time="4.601" classname="auth_jwt_with_token_that_expires">
    </testcase>
    <testcase name="realtime/auth auth_jwt_with_token_that_renews" time="5.192" classname="auth_jwt_with_token_that_renews">
    </testcase>
    <testcase name="realtime/auth init_client_with_simple_jwt_token" time="0.264" classname="init_client_with_simple_jwt_token">
    </testcase>
    <testcase name="realtime/auth reauth_consistently_expired_token" time="3.172" classname="reauth_consistently_expired_token">
    </testcase>
    <testcase name="realtime/auth expired_token_no_autoremove_when_dont_have_servertime" time="0.260" classname="expired_token_no_autoremove_when_dont_have_servertime">
    </testcase>
    <testcase name="realtime/auth expired_token_autoremove_when_have_servertime" time="0.323" classname="expired_token_autoremove_when_have_servertime">
    </testcase>
    <testcase name="realtime/auth multiple_concurrent_authorize" time="0.475" classname="multiple_concurrent_authorize">
    </testcase>
    <testcase name="realtime/auth authorize_immediately_after_init with web_socket binary protocol" time="0.322" classname="authorize_immediately_after_init with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/auth authorize_immediately_after_init with web_socket text protocol" time="0.324" classname="authorize_immediately_after_init with web_socket text protocol">
    </testcase>
    <testcase name="realtime/auth authorize_immediately_after_init with comet binary protocol" time="0.321" classname="authorize_immediately_after_init with comet binary protocol">
    </testcase>
    <testcase name="realtime/auth authorize_immediately_after_init with comet text protocol" time="0.321" classname="authorize_immediately_after_init with comet text protocol">
    </testcase>
    <testcase name="realtime/auth authorize_immediately_after_init with binary protocol" time="0.326" classname="authorize_immediately_after_init with binary protocol">
    </testcase>
    <testcase name="realtime/auth authorize_immediately_after_init with text protocol" time="0.320" classname="authorize_immediately_after_init with text protocol">
    </testcase>
  </testsuite>
  <testsuite name="realtime/channel" timestamp="2026-03-11T11:58:59" tests="124" file="/home/runner/work/ably-js/ably-js/test/realtime/channel.test.js" time="114.434" failures="10">
    <testcase name="realtime/channel channelinit0 with web_socket binary protocol" time="0.192" classname="channelinit0 with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel channelinit0 with web_socket text protocol" time="0.191" classname="channelinit0 with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel channelinit0 with comet binary protocol" time="0.075" classname="channelinit0 with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel channelinit0 with comet text protocol" time="0.075" classname="channelinit0 with comet text protocol">
    </testcase>
    <testcase name="realtime/channel channelinit0 with binary protocol" time="0.191" classname="channelinit0 with binary protocol">
    </testcase>
    <testcase name="realtime/channel channelinit0 with text protocol" time="0.191" classname="channelinit0 with text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach0 with web_socket binary protocol" time="0.293" classname="channelattach0 with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach0 with web_socket text protocol" time="0.254" classname="channelattach0 with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach0 with comet binary protocol" time="3.291" classname="channelattach0 with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach0 with comet binary protocol" time="3.291" classname="channelattach0 with comet binary protocol">
      <failure message="done() called multiple times in test &lt;realtime/channel channelattach0 with comet binary protocol&gt; of file /home/runner/work/ably-js/ably-js/test/realtime/channel.test.js" type="Error"><![CDATA[Error: done() called multiple times in test <realtime/channel channelattach0 with comet binary protocol> of file /home/runner/work/ably-js/ably-js/test/realtime/channel.test.js
    at /home/runner/work/ably-js/ably-js/test/common/modules/shared_helper.js:212:9
    at Object.<anonymous> (test/common/modules/shared_helper.js:298:9)
    at callListener (src/common/lib/util/eventemitter.ts:8:14)
    at /home/runner/work/ably-js/ably-js/src/common/lib/util/eventemitter.ts:220:7
    at Array.forEach (<anonymous>)
    at NodeCometTransport.emit (src/common/lib/util/eventemitter.ts:219:15)
    at /home/runner/work/ably-js/ably-js/src/common/lib/transport/comettransport.ts:203:14
    at processTicksAndRejections (node:internal/process/task_queues:78:11)]]></failure>
    </testcase>
    <testcase name="realtime/channel channelattach0 with comet text protocol" time="0.147" classname="channelattach0 with comet text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach0 with binary protocol" time="0.259" classname="channelattach0 with binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach0 with text protocol" time="0.261" classname="channelattach0 with text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach2 with web_socket binary protocol" time="0.258" classname="channelattach2 with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach2 with web_socket text protocol" time="0.249" classname="channelattach2 with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach2 with comet binary protocol" time="0.144" classname="channelattach2 with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach2 with comet text protocol" time="6.280" classname="channelattach2 with comet text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach2 with binary protocol" time="0.252" classname="channelattach2 with binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach2 with text protocol" time="0.251" classname="channelattach2 with text protocol">
    </testcase>
    <testcase name="realtime/channel channelattachempty with web_socket binary protocol" time="1.261" classname="channelattachempty with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattachempty with web_socket text protocol" time="1.253" classname="channelattachempty with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel channelattachempty with comet binary protocol" time="2.293" classname="channelattachempty with comet binary protocol">
      <failure message="Client should still be connected: expected false to be truthy" type="AssertionError"><![CDATA[AssertionError: Client should still be connected: expected false to be truthy
    at Timeout._onTimeout (test/realtime/channel.test.js:317:112)
    at listOnTimeout (node:internal/timers:559:17)
    at processTimers (node:internal/timers:502:7)]]></failure>
    </testcase>
    <testcase name="realtime/channel channelattachempty with comet text protocol" time="1.284" classname="channelattachempty with comet text protocol">
      <failure message="Client should still be connected: expected false to be truthy" type="AssertionError"><![CDATA[AssertionError: Client should still be connected: expected false to be truthy
    at Timeout._onTimeout (test/realtime/channel.test.js:317:112)
    at listOnTimeout (node:internal/timers:559:17)
    at processTimers (node:internal/timers:502:7)]]></failure>
    </testcase>
    <testcase name="realtime/channel channelattachempty with binary protocol" time="1.252" classname="channelattachempty with binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattachempty with text protocol" time="1.255" classname="channelattachempty with text protocol">
    </testcase>
    <testcase name="realtime/channel channelattachinvalid with web_socket binary protocol" time="1.257" classname="channelattachinvalid with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattachinvalid with web_socket text protocol" time="1.254" classname="channelattachinvalid with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel channelattachinvalid with comet binary protocol" time="2.289" classname="channelattachinvalid with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattachinvalid with comet text protocol" time="6.291" classname="channelattachinvalid with comet text protocol">
    </testcase>
    <testcase name="realtime/channel channelattachinvalid with binary protocol" time="1.254" classname="channelattachinvalid with binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattachinvalid with text protocol" time="1.256" classname="channelattachinvalid with text protocol">
    </testcase>
    <testcase name="realtime/channel publish_no_attach with web_socket binary protocol" time="0.265" classname="publish_no_attach with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel publish_no_attach with web_socket text protocol" time="0.263" classname="publish_no_attach with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel publish_no_attach with comet binary protocol" time="0.147" classname="publish_no_attach with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel publish_no_attach with comet text protocol" time="0.149" classname="publish_no_attach with comet text protocol">
    </testcase>
    <testcase name="realtime/channel publish_no_attach with binary protocol" time="0.255" classname="publish_no_attach with binary protocol">
    </testcase>
    <testcase name="realtime/channel publish_no_attach with text protocol" time="0.257" classname="publish_no_attach with text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_publish_invalid with web_socket binary protocol" time="0.254" classname="channelattach_publish_invalid with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_publish_invalid with web_socket text protocol" time="0.256" classname="channelattach_publish_invalid with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_publish_invalid with comet binary protocol" time="0.211" classname="channelattach_publish_invalid with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_publish_invalid with comet text protocol" time="38.551" classname="channelattach_publish_invalid with comet text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_publish_invalid with binary protocol" time="0.391" classname="channelattach_publish_invalid with binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_publish_invalid with text protocol" time="0.403" classname="channelattach_publish_invalid with text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_invalid_twice with web_socket binary protocol" time="1.451" classname="channelattach_invalid_twice with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_invalid_twice with web_socket text protocol" time="1.460" classname="channelattach_invalid_twice with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_invalid_twice with comet binary protocol" time="5.645" classname="channelattach_invalid_twice with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_invalid_twice with comet text protocol" time="1.340" classname="channelattach_invalid_twice with comet text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_invalid_twice with binary protocol" time="1.454" classname="channelattach_invalid_twice with binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_invalid_twice with text protocol" time="1.480" classname="channelattach_invalid_twice with text protocol">
    </testcase>
    <testcase name="realtime/channel channelattachWhenState" time="0.388" classname="channelattachWhenState">
    </testcase>
    <testcase name="realtime/channel channelattachOnceOrIfBefore" time="0.386" classname="channelattachOnceOrIfBefore">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicChannelsGet with web_socket binary protocol" time="1.683" classname="attachWithChannelParamsBasicChannelsGet with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicChannelsGet with web_socket text protocol" time="1.658" classname="attachWithChannelParamsBasicChannelsGet with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicChannelsGet with comet binary protocol" time="1.568" classname="attachWithChannelParamsBasicChannelsGet with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicChannelsGet with comet text protocol" time="1.039" classname="attachWithChannelParamsBasicChannelsGet with comet text protocol">
      <failure message="Channel detached" type="Error"><![CDATA[Error: Channel detached
    at _RealtimeChannel.processMessage (src/common/lib/client/realtimechannel.ts:603:13)
    at Channels2.processChannelMessage (src/common/lib/client/baserealtime.ts:157:19)
    at _ConnectionManager.processChannelMessage (src/common/lib/transport/connectionmanager.ts:1879:34)
    at _ConnectionManager.processNextPendingChannelMessage (src/common/lib/transport/connectionmanager.ts:1861:12)
    at _ConnectionManager.onChannelMessage (src/common/lib/transport/connectionmanager.ts:1852:12)
    at NodeCometTransport.onProtocolMessage (src/common/lib/transport/transport.ts:207:32)
    at NodeCometTransport.onData (src/common/lib/transport/comettransport.ts:355:16)
    at Object.<anonymous> (src/common/lib/transport/comettransport.ts:323:12)
    at callListener (src/common/lib/util/eventemitter.ts:8:14)
    at /home/runner/work/ably-js/ably-js/src/common/lib/util/eventemitter.ts:220:7
    at Array.forEach (<anonymous>)
    at Request.emit (src/common/lib/util/eventemitter.ts:219:15)
    at onChunk (src/platform/nodejs/lib/transport/nodecomettransport.js:206:12)
    at Array.map (<anonymous>)
    at IncomingMessage.res.on.ondata (src/platform/nodejs/lib/transport/nodecomettransport.js:229:19)
    at IncomingMessage.emit (node:events:513:28)
    at IncomingMessage.Readable.read (node:internal/streams/readable:527:10)
    at flow (node:internal/streams/readable:1011:34)
    at resume_ (node:internal/streams/readable:992:3)
    at processTicksAndRejections (node:internal/process/task_queues:83:21)]]></failure>
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicChannelsGet with comet text protocol" time="1.039" classname="attachWithChannelParamsBasicChannelsGet with comet text protocol">
      <failure message="done() called multiple times in test &lt;realtime/channel attachWithChannelParamsBasicChannelsGet with comet text protocol&gt; of file /home/runner/work/ably-js/ably-js/test/realtime/channel.test.js; in addition, done() received error: [_ErrorInfo: Connection closed; statusCode=400; code=80017; see https://help.ably.io/error/80017 ]" type="Error"><![CDATA[Error: done() called multiple times in test <realtime/channel attachWithChannelParamsBasicChannelsGet with comet text protocol> of file /home/runner/work/ably-js/ably-js/test/realtime/channel.test.js; in addition, done() received error: [_ErrorInfo: Connection closed; statusCode=400; code=80017; see https://help.ably.io/error/80017 ]
    at /home/runner/work/ably-js/ably-js/test/common/modules/shared_helper.js:212:9
    at /home/runner/work/ably-js/ably-js/test/common/modules/shared_helper.js:291:11
    at processTicksAndRejections (node:internal/process/task_queues:78:11)]]></failure>
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicChannelsGet with binary protocol" time="1.672" classname="attachWithChannelParamsBasicChannelsGet with binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicChannelsGet with text protocol" time="1.656" classname="attachWithChannelParamsBasicChannelsGet with text protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions with web_socket binary protocol" time="1.677" classname="attachWithChannelParamsBasicSetOptions with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions with web_socket text protocol" time="1.688" classname="attachWithChannelParamsBasicSetOptions with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions with comet binary protocol" time="0.581" classname="attachWithChannelParamsBasicSetOptions with comet binary protocol">
      <failure message="done() invoked with non-Error: checkCantPublish: unexpectedly allowed to publish" type="Error"><![CDATA[Error: done() invoked with non-Error: checkCantPublish: unexpectedly allowed to publish
    at /home/runner/work/ably-js/ably-js/test/common/modules/shared_helper.js:212:9
    at Object.<anonymous> (test/common/modules/shared_helper.js:298:9)
    at callListener (src/common/lib/util/eventemitter.ts:8:14)
    at /home/runner/work/ably-js/ably-js/src/common/lib/util/eventemitter.ts:220:7
    at Array.forEach (<anonymous>)
    at NodeCometTransport.emit (src/common/lib/util/eventemitter.ts:219:15)
    at /home/runner/work/ably-js/ably-js/src/common/lib/transport/comettransport.ts:203:14
    at processTicksAndRejections (node:internal/process/task_queues:78:11)]]></failure>
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions with comet binary protocol" time="0.581" classname="attachWithChannelParamsBasicSetOptions with comet binary protocol">
      <failure message="done() called multiple times in test &lt;realtime/channel attachWithChannelParamsBasicSetOptions with comet binary protocol&gt; of file /home/runner/work/ably-js/ably-js/test/realtime/channel.test.js; in addition, done() received error: [_ErrorInfo: Connection closed; statusCode=400; code=80017; see https://help.ably.io/error/80017 ]" type="Error"><![CDATA[Error: done() called multiple times in test <realtime/channel attachWithChannelParamsBasicSetOptions with comet binary protocol> of file /home/runner/work/ably-js/ably-js/test/realtime/channel.test.js; in addition, done() received error: [_ErrorInfo: Connection closed; statusCode=400; code=80017; see https://help.ably.io/error/80017 ]
    at /home/runner/work/ably-js/ably-js/test/common/modules/shared_helper.js:212:9
    at /home/runner/work/ably-js/ably-js/test/common/modules/shared_helper.js:291:11
    at processTicksAndRejections (node:internal/process/task_queues:78:11)]]></failure>
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions with comet text protocol" time="0.555" classname="attachWithChannelParamsBasicSetOptions with comet text protocol">
      <failure message="done() invoked with non-Error: checkCantPublish: unexpectedly allowed to publish" type="Error"><![CDATA[Error: done() invoked with non-Error: checkCantPublish: unexpectedly allowed to publish
    at /home/runner/work/ably-js/ably-js/test/common/modules/shared_helper.js:212:9
    at Object.<anonymous> (test/common/modules/shared_helper.js:298:9)
    at callListener (src/common/lib/util/eventemitter.ts:8:14)
    at /home/runner/work/ably-js/ably-js/src/common/lib/util/eventemitter.ts:220:7
    at Array.forEach (<anonymous>)
    at NodeCometTransport.emit (src/common/lib/util/eventemitter.ts:219:15)
    at /home/runner/work/ably-js/ably-js/src/common/lib/transport/comettransport.ts:203:14
    at processTicksAndRejections (node:internal/process/task_queues:78:11)]]></failure>
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions with comet text protocol" time="0.555" classname="attachWithChannelParamsBasicSetOptions with comet text protocol">
      <failure message="done() called multiple times in test &lt;realtime/channel attachWithChannelParamsBasicSetOptions with comet text protocol&gt; of file /home/runner/work/ably-js/ably-js/test/realtime/channel.test.js; in addition, done() received error: [_ErrorInfo: Connection closed; statusCode=400; code=80017; see https://help.ably.io/error/80017 ]" type="Error"><![CDATA[Error: done() called multiple times in test <realtime/channel attachWithChannelParamsBasicSetOptions with comet text protocol> of file /home/runner/work/ably-js/ably-js/test/realtime/channel.test.js; in addition, done() received error: [_ErrorInfo: Connection closed; statusCode=400; code=80017; see https://help.ably.io/error/80017 ]
    at /home/runner/work/ably-js/ably-js/test/common/modules/shared_helper.js:212:9
    at /home/runner/work/ably-js/ably-js/test/common/modules/shared_helper.js:291:11
    at processTicksAndRejections (node:internal/process/task_queues:78:11)]]></failure>
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions with binary protocol" time="1.466" classname="attachWithChannelParamsBasicSetOptions with binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions with text protocol" time="1.446" classname="attachWithChannelParamsBasicSetOptions with text protocol">
    </testcase>
    <testcase name="realtime/channel subscribeAfterSetOptions with web_socket binary protocol" time="0.264" classname="subscribeAfterSetOptions with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel subscribeAfterSetOptions with web_socket text protocol" time="0.283" classname="subscribeAfterSetOptions with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel subscribeAfterSetOptions with comet binary protocol" time="0.214" classname="subscribeAfterSetOptions with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel subscribeAfterSetOptions with comet text protocol" time="0.218" classname="subscribeAfterSetOptions with comet text protocol">
    </testcase>
    <testcase name="realtime/channel subscribeAfterSetOptions with binary protocol" time="0.254" classname="subscribeAfterSetOptions with binary protocol">
    </testcase>
    <testcase name="realtime/channel subscribeAfterSetOptions with text protocol" time="0.263" classname="subscribeAfterSetOptions with text protocol">
    </testcase>
    <testcase name="realtime/channel channelGetShouldThrowWhenWouldCauseReattach" time="0.264" classname="channelGetShouldThrowWhenWouldCauseReattach">
    </testcase>
    <testcase name="realtime/channel setOptionsCallbackBehaviour with web_socket binary protocol" time="0.377" classname="setOptionsCallbackBehaviour with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel setOptionsCallbackBehaviour with web_socket text protocol" time="0.391" classname="setOptionsCallbackBehaviour with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel setOptionsCallbackBehaviour with comet binary protocol" time="0.418" classname="setOptionsCallbackBehaviour with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel setOptionsCallbackBehaviour with comet binary protocol" time="0.418" classname="setOptionsCallbackBehaviour with comet binary protocol">
      <failure message="Check channel went to the server to update the channel params: expected false to be truthy" type="AssertionError"><![CDATA[AssertionError: Check channel went to the server to update the channel params: expected false to be truthy
    at /home/runner/work/ably-js/ably-js/test/realtime/channel.test.js:773:27
    at processTicksAndRejections (node:internal/process/task_queues:78:11)]]></failure>
    </testcase>
  </testsuite>
</testsuites>