<testsuites name="Mocha Tests" time="775.849" tests="926" failures="8" skipped="38">
  <testsuite name="Root Suite" timestamp="2025-06-19T16:34:42" tests="0" time="0.000" failures="0">
  </testsuite>
  <testsuite name="realtime/annotations" timestamp="2025-06-19T16:34:42" tests="2" file="/home/runner/work/ably-js/ably-js/test/realtime/annotations.test.js" time="10.278" failures="0">
    <testcase name="realtime/annotations publish and subscribe annotations" time="1.449" classname="publish and subscribe annotations">
    </testcase>
    <testcase name="realtime/annotations get all annotations rest request" time="4.558" classname="get all annotations rest request">
    </testcase>
  </testsuite>
  <testsuite name="realtime/api" timestamp="2025-06-19T16:34:52" tests="6" file="/home/runner/work/ably-js/ably-js/test/realtime/api.test.js" time="0.006" 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.000" classname="constructor without any arguments">
    </testcase>
    <testcase name="realtime/api constructor with conflict client options" time="0.002" 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="2025-06-19T16:34:52" tests="83" file="/home/runner/work/ably-js/ably-js/test/realtime/auth.test.js" time="138.874" failures="0">
    <testcase name="realtime/auth authbase0" time="0.034" classname="authbase0">
    </testcase>
    <testcase name="realtime/auth auth_useAuthUrl_json" time="0.351" classname="auth_useAuthUrl_json">
    </testcase>
    <testcase name="realtime/auth auth_useAuthUrl_post_json" time="0.179" classname="auth_useAuthUrl_post_json">
    </testcase>
    <testcase name="realtime/auth auth_useAuthUrl_plainText" time="0.301" classname="auth_useAuthUrl_plainText">
    </testcase>
    <testcase name="realtime/auth auth_useAuthCallback_tokenRequestResponse" time="0.039" classname="auth_useAuthCallback_tokenRequestResponse">
    </testcase>
    <testcase name="realtime/auth auth_useAuthCallback_tokenDetailsResponse" time="0.151" classname="auth_useAuthCallback_tokenDetailsResponse">
    </testcase>
    <testcase name="realtime/auth auth_useAuthCallback_tokenStringResponse" time="0.117" classname="auth_useAuthCallback_tokenStringResponse">
    </testcase>
    <testcase name="realtime/auth auth_useAuthUrl_mixed_authParams_qsParams" time="0.131" classname="auth_useAuthUrl_mixed_authParams_qsParams">
    </testcase>
    <testcase name="realtime/auth auth_clientid_inheritance" time="0.066" classname="auth_clientid_inheritance">
    </testcase>
    <testcase name="realtime/auth auth_clientid_inheritance2" time="0.013" classname="auth_clientid_inheritance2">
    </testcase>
    <testcase name="realtime/auth auth_clientid_inheritance3" time="0.051" classname="auth_clientid_inheritance3">
    </testcase>
    <testcase name="realtime/auth auth_clientid_inheritance4" time="0.038" classname="auth_clientid_inheritance4">
    </testcase>
    <testcase name="realtime/auth auth_clientid_inheritance5" time="0.149" classname="auth_clientid_inheritance5">
    </testcase>
    <testcase name="realtime/auth authCallback_error" time="0.001" classname="authCallback_error">
    </testcase>
    <testcase name="realtime/auth authCallback_timeout" time="0.102" 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.000" 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.000" 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.258" classname="authUrl_404">
    </testcase>
    <testcase name="realtime/auth authUrl_wrong_content_type" time="0.031" classname="authUrl_wrong_content_type">
    </testcase>
    <testcase name="realtime/auth authUrl_401" time="0.073" classname="authUrl_401">
    </testcase>
    <testcase name="realtime/auth authUrl_double_encoded" time="0.073" classname="authUrl_double_encoded">
    </testcase>
    <testcase name="realtime/auth authUrl_403" time="0.073" classname="authUrl_403">
    </testcase>
    <testcase name="realtime/auth authUrl_403_custom_error" time="0.074" classname="authUrl_403_custom_error">
    </testcase>
    <testcase name="realtime/auth authUrl_403_previously_active" time="0.223" classname="authUrl_403_previously_active">
    </testcase>
    <testcase name="realtime/auth auth_token_expires with web_socket binary protocol" time="5.005" classname="auth_token_expires with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_expires with web_socket text protocol" time="5.003" classname="auth_token_expires with web_socket text protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_expires with comet binary protocol" time="5.005" classname="auth_token_expires with comet binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_expires with comet text protocol" time="5.006" classname="auth_token_expires with comet text protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_expires with binary protocol" time="5.004" classname="auth_token_expires with binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_expires with text protocol" time="5.004" classname="auth_token_expires with text protocol">
    </testcase>
    <testcase name="realtime/auth auth_query_time_once" time="0.010" classname="auth_query_time_once">
    </testcase>
    <testcase name="realtime/auth auth_tokenDetails_expiry_with_authcallback with web_socket binary protocol" time="5.168" 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.040" 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.039" 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.085" 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.043" classname="auth_tokenDetails_expiry_with_authcallback with binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_tokenDetails_expiry_with_authcallback with text protocol" time="5.072" 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.041" 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.041" 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.059" 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.042" 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.040" 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.178" 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.005" 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.003" 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="5.004" classname="auth_token_string_expiry_with_token with comet binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_token with comet text protocol" time="5.006" classname="auth_token_string_expiry_with_token with comet text protocol">
    </testcase>
    <testcase name="realtime/auth auth_token_string_expiry_with_token with binary protocol" time="5.011" 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.005" 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.229" 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.138" 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.327" classname="auth_expired_token_string with comet binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_expired_token_string with comet text protocol" time="0.135" classname="auth_expired_token_string with comet text protocol">
    </testcase>
    <testcase name="realtime/auth auth_expired_token_string with binary protocol" time="0.147" classname="auth_expired_token_string with binary protocol">
    </testcase>
    <testcase name="realtime/auth auth_expired_token_string with text protocol" time="0.141" classname="auth_expired_token_string with text protocol">
    </testcase>
    <testcase name="realtime/auth authorize_updates_stored_details" time="0.001" classname="authorize_updates_stored_details">
    </testcase>
    <testcase name="realtime/auth mocked_reauth" time="0.053" classname="mocked_reauth">
    </testcase>
    <testcase name="realtime/auth auth_jwt_with_clientid" time="0.271" classname="auth_jwt_with_clientid">
    </testcase>
    <testcase name="realtime/auth auth_jwt_with_clientid_application_jwt" time="0.098" classname="auth_jwt_with_clientid_application_jwt">
    </testcase>
    <testcase name="realtime/auth auth_jwt_with_subscribe_only_capability" time="0.115" classname="auth_jwt_with_subscribe_only_capability">
    </testcase>
    <testcase name="realtime/auth auth_jwt_with_publish_capability" time="0.132" classname="auth_jwt_with_publish_capability">
    </testcase>
    <testcase name="realtime/auth auth_jwt_with_token_that_expires" time="4.669" classname="auth_jwt_with_token_that_expires">
    </testcase>
    <testcase name="realtime/auth auth_jwt_with_token_that_renews" time="5.082" classname="auth_jwt_with_token_that_renews">
    </testcase>
    <testcase name="realtime/auth init_client_with_simple_jwt_token" time="0.101" classname="init_client_with_simple_jwt_token">
    </testcase>
    <testcase name="realtime/auth reauth_consistently_expired_token" time="3.118" classname="reauth_consistently_expired_token">
    </testcase>
    <testcase name="realtime/auth expired_token_no_autoremove_when_dont_have_servertime" time="0.044" classname="expired_token_no_autoremove_when_dont_have_servertime">
    </testcase>
    <testcase name="realtime/auth expired_token_autoremove_when_have_servertime" time="0.076" classname="expired_token_autoremove_when_have_servertime">
    </testcase>
    <testcase name="realtime/auth multiple_concurrent_authorize" time="0.090" classname="multiple_concurrent_authorize">
    </testcase>
    <testcase name="realtime/auth authorize_immediately_after_init with web_socket binary protocol" time="0.046" 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.050" 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.043" classname="authorize_immediately_after_init with comet binary protocol">
    </testcase>
    <testcase name="realtime/auth authorize_immediately_after_init with comet text protocol" time="0.043" classname="authorize_immediately_after_init with comet text protocol">
    </testcase>
    <testcase name="realtime/auth authorize_immediately_after_init with binary protocol" time="0.050" classname="authorize_immediately_after_init with binary protocol">
    </testcase>
    <testcase name="realtime/auth authorize_immediately_after_init with text protocol" time="0.044" classname="authorize_immediately_after_init with text protocol">
    </testcase>
  </testsuite>
  <testsuite name="realtime/channel" timestamp="2025-06-19T16:37:11" tests="121" file="/home/runner/work/ably-js/ably-js/test/realtime/channel.test.js" time="56.617" failures="0">
    <testcase name="realtime/channel channelinit0 with web_socket binary protocol" time="0.033" classname="channelinit0 with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel channelinit0 with web_socket text protocol" time="0.034" classname="channelinit0 with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel channelinit0 with comet binary protocol" time="0.018" classname="channelinit0 with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel channelinit0 with comet text protocol" time="0.018" classname="channelinit0 with comet text protocol">
    </testcase>
    <testcase name="realtime/channel channelinit0 with binary protocol" time="0.029" classname="channelinit0 with binary protocol">
    </testcase>
    <testcase name="realtime/channel channelinit0 with text protocol" time="0.054" classname="channelinit0 with text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach0 with web_socket binary protocol" time="0.078" classname="channelattach0 with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach0 with web_socket text protocol" time="0.042" classname="channelattach0 with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach0 with comet binary protocol" time="0.041" classname="channelattach0 with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach0 with comet text protocol" time="0.036" classname="channelattach0 with comet text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach0 with binary protocol" time="0.044" classname="channelattach0 with binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach0 with text protocol" time="0.039" classname="channelattach0 with text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach2 with web_socket binary protocol" time="0.056" classname="channelattach2 with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach2 with web_socket text protocol" time="0.038" classname="channelattach2 with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach2 with comet binary protocol" time="0.050" classname="channelattach2 with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach2 with comet text protocol" time="0.036" classname="channelattach2 with comet text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach2 with binary protocol" time="0.036" classname="channelattach2 with binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach2 with text protocol" time="0.033" classname="channelattach2 with text protocol">
    </testcase>
    <testcase name="realtime/channel channelattachempty with web_socket binary protocol" time="1.034" classname="channelattachempty with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattachempty with web_socket text protocol" time="1.039" classname="channelattachempty with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel channelattachempty with comet binary protocol" time="1.036" classname="channelattachempty with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattachempty with comet text protocol" time="1.042" classname="channelattachempty with comet text protocol">
    </testcase>
    <testcase name="realtime/channel channelattachempty with binary protocol" time="1.038" classname="channelattachempty with binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattachempty with text protocol" time="1.040" classname="channelattachempty with text protocol">
    </testcase>
    <testcase name="realtime/channel channelattachinvalid with web_socket binary protocol" time="1.040" classname="channelattachinvalid with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattachinvalid with web_socket text protocol" time="1.038" classname="channelattachinvalid with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel channelattachinvalid with comet binary protocol" time="1.048" classname="channelattachinvalid with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattachinvalid with comet text protocol" time="1.040" classname="channelattachinvalid with comet text protocol">
    </testcase>
    <testcase name="realtime/channel channelattachinvalid with binary protocol" time="1.041" classname="channelattachinvalid with binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattachinvalid with text protocol" time="1.039" classname="channelattachinvalid with text protocol">
    </testcase>
    <testcase name="realtime/channel publish_no_attach with web_socket binary protocol" time="0.046" classname="publish_no_attach with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel publish_no_attach with web_socket text protocol" time="0.041" classname="publish_no_attach with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel publish_no_attach with comet binary protocol" time="0.046" classname="publish_no_attach with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel publish_no_attach with comet text protocol" time="0.037" classname="publish_no_attach with comet text protocol">
    </testcase>
    <testcase name="realtime/channel publish_no_attach with binary protocol" time="0.036" classname="publish_no_attach with binary protocol">
    </testcase>
    <testcase name="realtime/channel publish_no_attach with text protocol" time="0.032" classname="publish_no_attach with text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_publish_invalid with web_socket binary protocol" time="0.044" classname="channelattach_publish_invalid with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_publish_invalid with web_socket text protocol" time="0.040" classname="channelattach_publish_invalid with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_publish_invalid with comet binary protocol" time="0.051" classname="channelattach_publish_invalid with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_publish_invalid with comet text protocol" time="0.058" classname="channelattach_publish_invalid with comet text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_publish_invalid with binary protocol" time="0.038" classname="channelattach_publish_invalid with binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_publish_invalid with text protocol" time="0.035" classname="channelattach_publish_invalid with text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_invalid_twice with web_socket binary protocol" time="1.053" classname="channelattach_invalid_twice with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_invalid_twice with web_socket text protocol" time="1.045" classname="channelattach_invalid_twice with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_invalid_twice with comet binary protocol" time="1.066" classname="channelattach_invalid_twice with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_invalid_twice with comet text protocol" time="1.060" classname="channelattach_invalid_twice with comet text protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_invalid_twice with binary protocol" time="1.047" classname="channelattach_invalid_twice with binary protocol">
    </testcase>
    <testcase name="realtime/channel channelattach_invalid_twice with text protocol" time="1.046" classname="channelattach_invalid_twice with text protocol">
    </testcase>
    <testcase name="realtime/channel channelattachWhenState" time="0.049" classname="channelattachWhenState">
    </testcase>
    <testcase name="realtime/channel channelattachOnceOrIfBefore" time="0.040" classname="channelattachOnceOrIfBefore">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicChannelsGet with web_socket binary protocol" time="1.082" classname="attachWithChannelParamsBasicChannelsGet with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicChannelsGet with web_socket text protocol" time="1.076" classname="attachWithChannelParamsBasicChannelsGet with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicChannelsGet with comet binary protocol" time="1.081" classname="attachWithChannelParamsBasicChannelsGet with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicChannelsGet with comet text protocol" time="1.090" classname="attachWithChannelParamsBasicChannelsGet with comet text protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicChannelsGet with binary protocol" time="1.081" classname="attachWithChannelParamsBasicChannelsGet with binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicChannelsGet with text protocol" time="1.083" classname="attachWithChannelParamsBasicChannelsGet with text protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions with web_socket binary protocol" time="1.087" classname="attachWithChannelParamsBasicSetOptions with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions with web_socket text protocol" time="1.087" classname="attachWithChannelParamsBasicSetOptions with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions with comet binary protocol" time="1.078" classname="attachWithChannelParamsBasicSetOptions with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions with comet text protocol" time="1.074" classname="attachWithChannelParamsBasicSetOptions with comet text protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions with binary protocol" time="1.074" classname="attachWithChannelParamsBasicSetOptions with binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsBasicSetOptions with text protocol" time="1.084" classname="attachWithChannelParamsBasicSetOptions with text protocol">
    </testcase>
    <testcase name="realtime/channel subscribeAfterSetOptions with web_socket binary protocol" time="0.043" classname="subscribeAfterSetOptions with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel subscribeAfterSetOptions with web_socket text protocol" time="0.039" classname="subscribeAfterSetOptions with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel subscribeAfterSetOptions with comet binary protocol" time="0.065" classname="subscribeAfterSetOptions with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel subscribeAfterSetOptions with comet text protocol" time="0.055" classname="subscribeAfterSetOptions with comet text protocol">
    </testcase>
    <testcase name="realtime/channel subscribeAfterSetOptions with binary protocol" time="0.039" classname="subscribeAfterSetOptions with binary protocol">
    </testcase>
    <testcase name="realtime/channel subscribeAfterSetOptions with text protocol" time="0.040" classname="subscribeAfterSetOptions with text protocol">
    </testcase>
    <testcase name="realtime/channel channelGetShouldThrowWhenWouldCauseReattach" time="0.039" classname="channelGetShouldThrowWhenWouldCauseReattach">
    </testcase>
    <testcase name="realtime/channel setOptionsCallbackBehaviour with web_socket binary protocol" time="0.049" classname="setOptionsCallbackBehaviour with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel setOptionsCallbackBehaviour with web_socket text protocol" time="0.065" classname="setOptionsCallbackBehaviour with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel setOptionsCallbackBehaviour with comet binary protocol" time="0.063" classname="setOptionsCallbackBehaviour with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel setOptionsCallbackBehaviour with comet text protocol" time="0.060" classname="setOptionsCallbackBehaviour with comet text protocol">
    </testcase>
    <testcase name="realtime/channel setOptionsCallbackBehaviour with binary protocol" time="0.043" classname="setOptionsCallbackBehaviour with binary protocol">
    </testcase>
    <testcase name="realtime/channel setOptionsCallbackBehaviour with text protocol" time="0.050" classname="setOptionsCallbackBehaviour with text protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsModesAndChannelModes with web_socket binary protocol" time="1.089" classname="attachWithChannelParamsModesAndChannelModes with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsModesAndChannelModes with web_socket text protocol" time="1.119" classname="attachWithChannelParamsModesAndChannelModes with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsModesAndChannelModes with comet binary protocol" time="1.103" classname="attachWithChannelParamsModesAndChannelModes with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsModesAndChannelModes with comet text protocol" time="1.113" classname="attachWithChannelParamsModesAndChannelModes with comet text protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsModesAndChannelModes with binary protocol" time="1.111" classname="attachWithChannelParamsModesAndChannelModes with binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsModesAndChannelModes with text protocol" time="1.086" classname="attachWithChannelParamsModesAndChannelModes with text protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelModes with web_socket binary protocol" time="1.101" classname="attachWithChannelModes with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelModes with web_socket text protocol" time="1.104" classname="attachWithChannelModes with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelModes with comet binary protocol" time="1.103" classname="attachWithChannelModes with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelModes with comet text protocol" time="1.102" classname="attachWithChannelModes with comet text protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelModes with binary protocol" time="1.111" classname="attachWithChannelModes with binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelModes with text protocol" time="1.093" classname="attachWithChannelModes with text protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsDeltaAndModes with web_socket binary protocol" time="0.133" classname="attachWithChannelParamsDeltaAndModes with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsDeltaAndModes with web_socket text protocol" time="0.098" classname="attachWithChannelParamsDeltaAndModes with web_socket text protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsDeltaAndModes with comet binary protocol" time="0.153" classname="attachWithChannelParamsDeltaAndModes with comet binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsDeltaAndModes with comet text protocol" time="0.116" classname="attachWithChannelParamsDeltaAndModes with comet text protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsDeltaAndModes with binary protocol" time="0.099" classname="attachWithChannelParamsDeltaAndModes with binary protocol">
    </testcase>
    <testcase name="realtime/channel attachWithChannelParamsDeltaAndModes with text protocol" time="0.103" classname="attachWithChannelParamsDeltaAndModes with text protocol">
    </testcase>
    <testcase name="realtime/channel attachWithInvalidChannelParams" time="0.050" classname="attachWithInvalidChannelParams">
    </testcase>
    <testcase name="realtime/channel channelsubscribe0" time="1.044" classname="channelsubscribe0">
    </testcase>
    <testcase name="realtime/channel channelsubscribe1" time="1.553" classname="channelsubscribe1">
    </testcase>
    <testcase name="realtime/channel server_sent_detached" time="0.149" classname="server_sent_detached">
    </testcase>
    <testcase name="realtime/channel server_sent_detached_while_attaching" time="0.028" classname="server_sent_detached_while_attaching">
    </testcase>
    <testcase name="realtime/channel server_sent_error" time="0.068" classname="server_sent_error">
    </testcase>
    <testcase name="realtime/channel server_sent_attached_err" time="0.065" classname="server_sent_attached_err">
    </testcase>
    <testcase name="realtime/channel publish_no_queueing" time="0.001" classname="publish_no_queueing">
    </testcase>
    <testcase name="realtime/channel channel_attach_timeout" time="2.125" classname="channel_attach_timeout">
    </testcase>
    <testcase name="realtime/channel suspended_connection" time="3.174" classname="suspended_connection">
    </testcase>
    <testcase name="realtime/channel attached_while_detaching" time="0.039" classname="attached_while_detaching">
    </testcase>
    <testcase name="realtime/channel detaching from suspended channel transitions channel to detached state" time="0.001" classname="detaching from suspended channel transitions channel to detached state">
    </testcase>
    <testcase name="realtime/channel detaching from failed channel results in error" time="0.001" classname="detaching from failed channel results in error">
    </testcase>
    <testcase name="realtime/channel rewind works on channel after reattaching" time="0.170" classname="rewind works on channel after reattaching">
    </testcase>
    <testcase name="realtime/channel attach_returns_state_change" time="0.043" classname="attach_returns_state_change">
    </testcase>
    <testcase name="realtime/channel subscribe_returns_state_change" time="0.039" classname="subscribe_returns_state_change">
    </testcase>
    <testcase name="realtime/channel rewind_has_backlog_0" time="0.123" classname="rewind_has_backlog_0">
    </testcase>
    <testcase name="realtime/channel rewind_has_backlog_1" time="0.049" classname="rewind_has_backlog_1">
    </testcase>
    <testcase name="realtime/channel should not throw exception then run RealtimeChannels.get() with same options" time="0.001" classname="should not throw exception then run RealtimeChannels.get() with same options">
    </testcase>
    <testcase name="realtime/channel whenState" time="0.049" classname="whenState">
    </testcase>
    <testcase name="realtime/channel set channelSerial field for ATTACH ProtocolMessage if available" time="0.098" classname="set channelSerial field for ATTACH ProtocolMessage if available">
    </testcase>
    <testcase name="realtime/channel channel.properties.channelSerial is updated with channelSerial from latest message" time="0.034" classname="channel.properties.channelSerial is updated with channelSerial from latest message">
    </testcase>
  </testsuite>
  <testsuite name="realtime/connection" timestamp="2025-06-19T16:38:08" tests="7" file="/home/runner/work/ably-js/ably-js/test/realtime/connection.test.js" time="0.289" failures="0">
    <testcase name="realtime/connection connectionPing" time="0.027" classname="connectionPing">
    </testcase>
    <testcase name="realtime/connection connectionPingWithCallback" time="0.036" classname="connectionPingWithCallback">
    </testcase>
    <testcase name="realtime/connection connectionAttributes" time="0.043" classname="connectionAttributes">
    </testcase>
    <testcase name="realtime/connection unrecoverableConnection" time="0.029" classname="unrecoverableConnection">
    </testcase>
    <testcase name="realtime/connection connectionQueuing" time="0.079" classname="connectionQueuing">
    </testcase>
    <testcase name="realtime/connection connectionDetails" time="0.033" classname="connectionDetails">
    </testcase>
    <testcase name="realtime/connection whenState" time="0.038" classname="whenState">
    </testcase>
  </testsuite>
  <testsuite name="realtime/connectivity" timestamp="2025-06-19T16:38:08" tests="2" file="/home/runner/work/ably-js/ably-js/test/realtime/connectivity.test.js" time="0.000" failures="0">
    <testcase name="realtime/connectivity http_connectivity_check" time="0.019" classname="http_connectivity_check">
    </testcase>
    <testcase name="realtime/connectivity disable_connectivity_check" time="0.000" classname="disable_connectivity_check">
    </testcase>
  </testsuite>
  <testsuite name="configured_connectivity_check_url" timestamp="2025-06-19T16:38:08" tests="6" file="/home/runner/work/ably-js/ably-js/test/realtime/connectivity.test.js" time="0.563" failures="0">
    <testcase name="realtime/connectivity configured_connectivity_check_url succeeds with scheme" time="0.254" classname="succeeds with scheme">
    </testcase>
    <testcase name="realtime/connectivity configured_connectivity_check_url fails with scheme" time="0.075" classname="fails with scheme">
    </testcase>
    <testcase name="realtime/connectivity configured_connectivity_check_url succeeds with querystring" time="0.074" classname="succeeds with querystring">
    </testcase>
    <testcase name="realtime/connectivity configured_connectivity_check_url fails with querystring" time="0.074" classname="fails with querystring">
    </testcase>
    <testcase name="realtime/connectivity configured_connectivity_check_url succeeds with plain url" time="0.009" classname="succeeds with plain url">
    </testcase>
    <testcase name="realtime/connectivity configured_connectivity_check_url fails with plain url" time="0.075" classname="fails with plain url">
    </testcase>
  </testsuite>
  <testsuite name="realtime/crypto" timestamp="2025-06-19T16:38:09" tests="40" file="/home/runner/work/ably-js/ably-js/test/realtime/crypto.test.js" time="5.905" failures="0">
    <testcase name="realtime/crypto generateRandomKey0" time="0.001" classname="generateRandomKey0">
    </testcase>
    <testcase name="realtime/crypto generateRandomKey1" time="0.000" classname="generateRandomKey1">
    </testcase>
    <testcase name="realtime/crypto getDefaultParams_withResultOfGenerateRandomKey" time="0.001" classname="getDefaultParams_withResultOfGenerateRandomKey">
    </testcase>
    <testcase name="realtime/crypto getDefaultParams_ArrayBuffer_key" time="0.000" classname="getDefaultParams_ArrayBuffer_key">
    </testcase>
    <testcase name="realtime/crypto getDefaultParams_base64_key" time="0.000" classname="getDefaultParams_base64_key">
    </testcase>
    <testcase name="realtime/crypto getDefaultParams_check_keylength" time="0.000" classname="getDefaultParams_check_keylength">
    </testcase>
    <testcase name="realtime/crypto getDefaultParams_preserves_custom_algorithms" time="0.000" classname="getDefaultParams_preserves_custom_algorithms">
    </testcase>
    <testcase name="realtime/crypto encrypt_message_128" time="0.005" classname="encrypt_message_128">
    </testcase>
    <testcase name="realtime/crypto encrypt_message_256" time="0.023" classname="encrypt_message_256">
    </testcase>
    <testcase name="realtime/crypto decrypt_message_128" time="0.008" classname="decrypt_message_128">
    </testcase>
    <testcase name="realtime/crypto decrypt_message_256" time="0.012" classname="decrypt_message_256">
    </testcase>
    <testcase name="realtime/crypto fromEncoded_cipher_options" time="0.009" classname="fromEncoded_cipher_options">
    </testcase>
    <testcase name="realtime/crypto msgpack_128" time="0.004" classname="msgpack_128">
    </testcase>
    <testcase name="realtime/crypto msgpack_256" time="0.031" classname="msgpack_256">
    </testcase>
    <testcase name="realtime/crypto single_send_128 with web_socket binary protocol" time="0.051" classname="single_send_128 with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/crypto single_send_128 with web_socket text protocol" time="0.048" classname="single_send_128 with web_socket text protocol">
    </testcase>
    <testcase name="realtime/crypto single_send_128 with comet binary protocol" time="0.049" classname="single_send_128 with comet binary protocol">
    </testcase>
    <testcase name="realtime/crypto single_send_128 with comet text protocol" time="0.057" classname="single_send_128 with comet text protocol">
    </testcase>
    <testcase name="realtime/crypto single_send_128 with binary protocol" time="0.045" classname="single_send_128 with binary protocol">
    </testcase>
    <testcase name="realtime/crypto single_send_128 with text protocol" time="0.049" classname="single_send_128 with text protocol">
    </testcase>
    <testcase name="realtime/crypto single_send_256 with web_socket binary protocol" time="0.049" classname="single_send_256 with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/crypto single_send_256 with web_socket text protocol" time="0.047" classname="single_send_256 with web_socket text protocol">
    </testcase>
    <testcase name="realtime/crypto single_send_256 with comet binary protocol" time="0.051" classname="single_send_256 with comet binary protocol">
    </testcase>
    <testcase name="realtime/crypto single_send_256 with comet text protocol" time="0.054" classname="single_send_256 with comet text protocol">
    </testcase>
    <testcase name="realtime/crypto single_send_256 with binary protocol" time="0.043" classname="single_send_256 with binary protocol">
    </testcase>
    <testcase name="realtime/crypto single_send_256 with text protocol" time="0.041" classname="single_send_256 with text protocol">
    </testcase>
    <testcase name="realtime/crypto multiple_send_binary_2_200" time="0.265" classname="multiple_send_binary_2_200">
    </testcase>
    <testcase name="realtime/crypto multiple_send_text_2_200" time="0.247" classname="multiple_send_text_2_200">
    </testcase>
    <testcase name="realtime/crypto multiple_send_binary_20_100" time="1.968" classname="multiple_send_binary_20_100">
    </testcase>
    <testcase name="realtime/crypto multiple_send_text_20_100" time="1.973" classname="multiple_send_text_20_100">
    </testcase>
    <testcase name="realtime/crypto multiple_send_binary_10_10" time="0.142" classname="multiple_send_binary_10_10">
    </testcase>
    <testcase name="realtime/crypto multiple_send_text_10_10" time="0.143" classname="multiple_send_text_10_10">
    </testcase>
    <testcase name="realtime/crypto single_send_binary_text" time="0.046" classname="single_send_binary_text">
    </testcase>
    <testcase name="realtime/crypto single_send_text_binary" time="0.049" classname="single_send_text_binary">
    </testcase>
    <testcase name="realtime/crypto publish_immediately" time="0.052" classname="publish_immediately">
    </testcase>
    <testcase name="realtime/crypto encrypted history" time="0.100" classname="encrypted history">
    </testcase>
    <testcase name="realtime/crypto single_send_key_mismatch" time="0.046" classname="single_send_key_mismatch">
    </testcase>
    <testcase name="realtime/crypto single_send_unencrypted" time="0.054" classname="single_send_unencrypted">
    </testcase>
    <testcase name="realtime/crypto single_send_encrypted_unhandled" time="0.051" classname="single_send_encrypted_unhandled">
    </testcase>
    <testcase name="realtime/crypto set_cipher_params0" time="0.067" classname="set_cipher_params0">
    </testcase>
  </testsuite>
  <testsuite name="realtime/delta" timestamp="2025-06-19T16:38:15" tests="5" file="/home/runner/work/ably-js/ably-js/test/realtime/delta.test.js" time="6.319" failures="0">
    <testcase name="realtime/delta deltaPlugin" time="1.569" classname="deltaPlugin">
    </testcase>
    <testcase name="realtime/delta unusedPlugin" time="1.563" classname="unusedPlugin">
    </testcase>
    <testcase name="realtime/delta lastMessageNotFoundRecovery" time="1.562" classname="lastMessageNotFoundRecovery">
    </testcase>
    <testcase name="realtime/delta deltaDecodeFailureRecovery" time="1.561" classname="deltaDecodeFailureRecovery">
    </testcase>
    <testcase name="realtime/delta noPlugin" time="0.063" classname="noPlugin">
    </testcase>
  </testsuite>
  <testsuite name="realtime/encoding" timestamp="2025-06-19T16:38:21" tests="2" file="/home/runner/work/ably-js/ably-js/test/realtime/encoding.test.js" time="0.193" failures="0">
    <testcase name="realtime/encoding message_decoding" time="0.065" classname="message_decoding">
    </testcase>
    <testcase name="realtime/encoding message_encoding" time="0.127" classname="message_encoding">
    </testcase>
  </testsuite>
  <testsuite name="realtime/event_emitter" timestamp="2025-06-19T16:38:21" tests="13" file="/home/runner/work/ably-js/ably-js/test/realtime/event_emitter.test.js" time="0.000" failures="0">
    <testcase name="realtime/event_emitter attachdetach0" time="0.035" classname="attachdetach0">
    </testcase>
    <testcase name="realtime/event_emitter emitCallsAllCallbacksIgnoringExceptions" time="0.000" classname="emitCallsAllCallbacksIgnoringExceptions">
    </testcase>
    <testcase name="realtime/event_emitter onceCalledOnlyOnce" time="0.001" classname="onceCalledOnlyOnce">
    </testcase>
    <testcase name="realtime/event_emitter onceCallbackDoesNotImpactOnCallback" time="0.000" classname="onceCallbackDoesNotImpactOnCallback">
    </testcase>
    <testcase name="realtime/event_emitter offRemovesAllMatchingListeners" time="0.000" classname="offRemovesAllMatchingListeners">
    </testcase>
    <testcase name="realtime/event_emitter offRemovesAllListeners" time="0.000" classname="offRemovesAllListeners">
    </testcase>
    <testcase name="realtime/event_emitter offRemovesAllMatchingEventListeners" time="0.001" classname="offRemovesAllMatchingEventListeners">
    </testcase>
    <testcase name="realtime/event_emitter offRemovesAllMatchingEvents" time="0.000" classname="offRemovesAllMatchingEvents">
    </testcase>
    <testcase name="realtime/event_emitter offRemovesEmptyEventNameListeners" time="0.000" classname="offRemovesEmptyEventNameListeners">
    </testcase>
    <testcase name="realtime/event_emitter arrayOfEvents" time="0.001" classname="arrayOfEvents">
    </testcase>
    <testcase name="realtime/event_emitter arrayOfEventsWithOnce" time="0.001" classname="arrayOfEventsWithOnce">
    </testcase>
    <testcase name="realtime/event_emitter listenerAddedInListenerCb" time="0.001" classname="listenerAddedInListenerCb">
    </testcase>
    <testcase name="realtime/event_emitter listenerRemovedInListenerCb" time="0.000" classname="listenerRemovedInListenerCb">
    </testcase>
  </testsuite>
  <testsuite name="event_emitter_promise" timestamp="2025-06-19T16:38:21" tests="4" file="/home/runner/work/ably-js/ably-js/test/realtime/event_emitter.test.js" time="0.067" failures="0">
    <testcase name="realtime/event_emitter event_emitter_promise whenState" time="0.032" classname="whenState">
    </testcase>
    <testcase name="realtime/event_emitter event_emitter_promise once" time="0.031" classname="once">
    </testcase>
    <testcase name="realtime/event_emitter event_emitter_promise anyEventsWithOnce" time="0.000" classname="anyEventsWithOnce">
    </testcase>
    <testcase name="realtime/event_emitter event_emitter_promise arrayOfEventsWithOnce" time="0.001" classname="arrayOfEventsWithOnce">
    </testcase>
  </testsuite>
  <testsuite name="realtime/failure" timestamp="2025-06-19T16:38:21" tests="20" file="/home/runner/work/ably-js/ably-js/test/realtime/failure.test.js" time="23.686" failures="0">
    <testcase name="realtime/failure invalid_cred_failure" time="0.036" classname="invalid_cred_failure">
    </testcase>
    <testcase name="realtime/failure break_transport" time="0.031" classname="break_transport">
    </testcase>
    <testcase name="realtime/failure no_connection_lifecycle" time="4.801" classname="no_connection_lifecycle">
    </testcase>
    <testcase name="realtime/failure disconnected_backoff_web_socket" time="1.203" classname="disconnected_backoff_web_socket">
    </testcase>
    <testcase name="realtime/failure disconnected_backoff_comet" time="1.059" classname="disconnected_backoff_comet">
    </testcase>
    <testcase name="realtime/failure failed_channel" time="0.040" classname="failed_channel">
    </testcase>
    <testcase name="realtime/failure attach_timeout" time="2.902" classname="attach_timeout">
    </testcase>
    <testcase name="realtime/failure channel_backoff_web_socket" time="1.338" classname="channel_backoff_web_socket">
    </testcase>
    <testcase name="realtime/failure channel_backoff_comet" time="1.330" classname="channel_backoff_comet">
    </testcase>
    <testcase name="realtime/failure nack_on_connection_suspended" time="0.036" classname="nack_on_connection_suspended">
    </testcase>
    <testcase name="realtime/failure nack_on_connection_failed" time="0.030" classname="nack_on_connection_failed">
    </testcase>
    <testcase name="realtime/failure nack_on_connection_closed" time="0.028" classname="nack_on_connection_closed">
    </testcase>
    <testcase name="realtime/failure idle_transport_timeout" time="2.228" classname="idle_transport_timeout">
    </testcase>
    <testcase name="realtime/failure try_fallback_hosts_on_placement_constraint with web_socket binary protocol" time="0.256" classname="try_fallback_hosts_on_placement_constraint with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/failure try_fallback_hosts_on_placement_constraint with web_socket text protocol" time="0.257" classname="try_fallback_hosts_on_placement_constraint with web_socket text protocol">
    </testcase>
    <testcase name="realtime/failure try_fallback_hosts_on_placement_constraint with comet binary protocol" time="0.253" classname="try_fallback_hosts_on_placement_constraint with comet binary protocol">
    </testcase>
    <testcase name="realtime/failure try_fallback_hosts_on_placement_constraint with comet text protocol" time="0.270" classname="try_fallback_hosts_on_placement_constraint with comet text protocol">
    </testcase>
    <testcase name="realtime/failure try_fallback_hosts_on_placement_constraint with binary protocol" time="0.260" classname="try_fallback_hosts_on_placement_constraint with binary protocol">
    </testcase>
    <testcase name="realtime/failure try_fallback_hosts_on_placement_constraint with text protocol" time="0.258" classname="try_fallback_hosts_on_placement_constraint with text protocol">
    </testcase>
    <testcase name="realtime/failure no_messages_if_not_attached" time="7.055" classname="no_messages_if_not_attached">
    </testcase>
  </testsuite>
  <testsuite name="realtime/history" timestamp="2025-06-19T16:38:45" tests="1" file="/home/runner/work/ably-js/ably-js/test/realtime/history.test.js" time="0.155" failures="0">
    <testcase name="realtime/history history_until_attach" time="0.154" classname="history_until_attach">
    </testcase>
  </testsuite>
  <testsuite name="realtime/init" timestamp="2025-06-19T16:38:45" tests="15" file="/home/runner/work/ably-js/ably-js/test/realtime/init.test.js" time="0.792" failures="0">
    <testcase name="realtime/init initbase0" time="0.029" classname="initbase0">
    </testcase>
    <testcase name="realtime/init init_key_string" time="0.001" classname="init_key_string">
    </testcase>
    <testcase name="realtime/init init_token_string" time="0.412" classname="init_token_string">
    </testcase>
    <testcase name="realtime/init init_key_with_usetokenauth" time="0.046" classname="init_key_with_usetokenauth">
    </testcase>
    <testcase name="realtime/init init_usetokenauth_defaulttokenparams_wildcard" time="0.041" classname="init_usetokenauth_defaulttokenparams_wildcard">
    </testcase>
    <testcase name="realtime/init init_defaulttokenparams_nonwildcard" time="0.045" classname="init_defaulttokenparams_nonwildcard">
    </testcase>
    <testcase name="realtime/init init_conflicting_clientids" time="0.044" classname="init_conflicting_clientids">
    </testcase>
    <testcase name="realtime/init init_with_usetokenauth_false_and_a_clientid" time="0.000" classname="init_with_usetokenauth_false_and_a_clientid">
    </testcase>
    <testcase name="realtime/init init_defaulthost" time="0.001" classname="init_defaulthost">
    </testcase>
    <testcase name="realtime/init init_timeouts" time="0.001" classname="init_timeouts">
    </testcase>
    <testcase name="realtime/init init_fallbacks" time="0.039" classname="init_fallbacks">
    </testcase>
    <testcase name="realtime/init node_transports" time="0.001" classname="node_transports">
    </testcase>
    <testcase name="realtime/init init_and_connection_details" time="0.051" classname="init_and_connection_details">
    </testcase>
    <testcase name="realtime/init init_fallbacks_once_connected" time="0.031" classname="init_fallbacks_once_connected">
    </testcase>
    <testcase name="realtime/init init_fallbacks_once_connected_2" time="0.046" classname="init_fallbacks_once_connected_2">
    </testcase>
  </testsuite>
  <testsuite name="realtime/message" timestamp="2025-06-19T16:38:46" tests="36" file="/home/runner/work/ably-js/ably-js/test/realtime/message.test.js" time="0.000" failures="0">
    <testcase name="realtime/message publishonce" time="0.053" classname="publishonce">
    </testcase>
    <testcase name="realtime/message publishfast with web_socket binary protocol" time="0.551" classname="publishfast with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/message publishfast with web_socket text protocol" time="0.595" classname="publishfast with web_socket text protocol">
    </testcase>
    <testcase name="realtime/message publishfast with comet binary protocol" time="0.557" classname="publishfast with comet binary protocol">
    </testcase>
    <testcase name="realtime/message publishfast with comet text protocol" time="0.573" classname="publishfast with comet text protocol">
    </testcase>
    <testcase name="realtime/message publishfast with binary protocol" time="0.547" classname="publishfast with binary protocol">
    </testcase>
    <testcase name="realtime/message publishfast with text protocol" time="0.550" classname="publishfast with text protocol">
    </testcase>
    <testcase name="realtime/message publishQueued with web_socket binary protocol" time="1.078" classname="publishQueued with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/message publishQueued with web_socket text protocol" time="1.081" classname="publishQueued with web_socket text protocol">
    </testcase>
    <testcase name="realtime/message publishQueued with comet binary protocol" time="1.082" classname="publishQueued with comet binary protocol">
    </testcase>
    <testcase name="realtime/message publishQueued with comet text protocol" time="1.099" classname="publishQueued with comet text protocol">
    </testcase>
    <testcase name="realtime/message publishQueued with binary protocol" time="1.094" classname="publishQueued with binary protocol">
    </testcase>
    <testcase name="realtime/message publishQueued with text protocol" time="1.082" classname="publishQueued with text protocol">
    </testcase>
    <testcase name="realtime/message publishEcho" time="0.056" classname="publishEcho">
    </testcase>
    <testcase name="realtime/message publishVariations" time="2.199" classname="publishVariations">
    </testcase>
    <testcase name="realtime/message publishDisallowed" time="0.044" classname="publishDisallowed">
    </testcase>
    <testcase name="realtime/message publishEncodings" time="0.100" classname="publishEncodings">
    </testcase>
    <testcase name="realtime/message restpublish" time="5.027" classname="restpublish">
    </testcase>
    <testcase name="realtime/message publish with web_socket binary protocol" time="0.582" classname="publish with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/message publish with web_socket text protocol" time="0.572" classname="publish with web_socket text protocol">
    </testcase>
    <testcase name="realtime/message publish with comet binary protocol" time="0.584" classname="publish with comet binary protocol">
    </testcase>
    <testcase name="realtime/message publish with comet text protocol" time="0.579" classname="publish with comet text protocol">
    </testcase>
    <testcase name="realtime/message publish with binary protocol" time="0.568" classname="publish with binary protocol">
    </testcase>
    <testcase name="realtime/message publish with text protocol" time="0.579" classname="publish with text protocol">
    </testcase>
    <testcase name="realtime/message implicit_client_id_0" time="0.097" classname="implicit_client_id_0">
    </testcase>
    <testcase name="realtime/message explicit_client_id_0" time="0.073" classname="explicit_client_id_0">
    </testcase>
    <testcase name="realtime/message explicit_client_id_1" time="0.565" classname="explicit_client_id_1">
    </testcase>
    <testcase name="realtime/message subscribe_with_event_array" time="0.046" classname="subscribe_with_event_array">
    </testcase>
    <testcase name="realtime/message subscribe_with_filter_object" time="0.056" classname="subscribe_with_filter_object">
    </testcase>
    <testcase name="realtime/message unsubscribe_with_filter_object" time="0.055" classname="unsubscribe_with_filter_object">
    </testcase>
    <testcase name="realtime/message extras_field" time="0.065" classname="extras_field">
    </testcase>
    <testcase name="realtime/message maxMessageSize" time="0.030" classname="maxMessageSize">
    </testcase>
    <testcase name="realtime/message idempotentRealtimePublishing" time="0.068" classname="idempotentRealtimePublishing">
    </testcase>
    <testcase name="realtime/message subscribes to filtered channel" time="0.068" classname="subscribes to filtered channel">
    </testcase>
    <testcase name="realtime/message unrecognized message action" time="0.044" classname="unrecognized message action">
    </testcase>
  </testsuite>
  <testsuite name="DefaultMessage.fromEncoded" timestamp="2025-06-19T16:39:08" tests="5" file="/home/runner/work/ably-js/ably-js/test/realtime/message.test.js" time="0.002" failures="0">
    <testcase name="realtime/message DefaultMessage.fromEncoded should stringify the numeric action" time="0.000" classname="should stringify the numeric action">
    </testcase>
    <testcase name="realtime/message DefaultMessage.fromEncoded should stringify the numeric action" time="0.000" classname="should stringify the numeric action">
    </testcase>
    <testcase name="realtime/message DefaultMessage.fromEncoded should handle no action provided" time="0.000" classname="should handle no action provided">
    </testcase>
    <testcase name="realtime/message DefaultMessage.fromEncoded should handle unknown action provided" time="0.000" classname="should handle unknown action provided">
    </testcase>
    <testcase name="realtime/message DefaultMessage.fromEncoded create message should fill out serial and createdAt from version/timestamp" time="0.000" classname="create message should fill out serial and createdAt from version/timestamp">
    </testcase>
  </testsuite>
  <testsuite name="realtime/objects" timestamp="2025-06-19T16:39:08" tests="1" file="/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js" time="0.000" failures="0">
    <testcase name="realtime/objects can attach to channel with object modes" time="0.059" classname="can attach to channel with object modes">
    </testcase>
  </testsuite>
  <testsuite name="Realtime without Objects plugin" timestamp="2025-06-19T16:39:09" tests="3" file="/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js" time="0.166" 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.000" 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.084" 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.081" classname="doesn&apos;t break when it receives an OBJECT_SYNC ProtocolMessage">
    </testcase>
  </testsuite>
  <testsuite name="Realtime with Objects plugin" timestamp="2025-06-19T16:39:09" tests="257" file="/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js" time="0.000" failures="0">
    <testcase name="realtime/objects Realtime with Objects plugin returns Objects class instance when accessing channel&apos;s `objects` property" time="0.001" 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.049" classname="getRoot() returns LiveMap instance">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin getRoot() returns LiveObject with id &quot;root&quot;" time="0.040" 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.030" 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.041" 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.038" 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.037" classname="getRoot() waits for OBJECT_SYNC with empty cursor before resolving">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence builds object tree on channel attachment with web_socket binary protocol" time="0.282" classname="OBJECT_SYNC sequence builds object tree on channel attachment with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence builds object tree on channel attachment with web_socket text protocol" time="1.240" classname="OBJECT_SYNC sequence builds object tree on channel attachment with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence builds object tree on channel attachment with comet binary protocol" time="0.156" classname="OBJECT_SYNC sequence builds object tree on channel attachment with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence builds object tree on channel attachment with comet text protocol" time="0.151" classname="OBJECT_SYNC sequence builds object tree on channel attachment with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence builds object tree on channel attachment with binary protocol" time="0.706" classname="OBJECT_SYNC sequence builds object tree on channel attachment with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence builds object tree on channel attachment with text protocol" time="0.139" classname="OBJECT_SYNC sequence builds object tree on channel attachment with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence builds object tree with all operations applied with web_socket binary protocol" time="2.275" classname="OBJECT_SYNC sequence builds object tree with all operations applied with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence builds object tree with all operations applied with web_socket text protocol" time="1.695" classname="OBJECT_SYNC sequence builds object tree with all operations applied with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence builds object tree with all operations applied with comet binary protocol" time="2.288" classname="OBJECT_SYNC sequence builds object tree with all operations applied with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence builds object tree with all operations applied with comet text protocol" time="2.238" classname="OBJECT_SYNC sequence builds object tree with all operations applied with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence builds object tree with all operations applied with binary protocol" time="2.230" classname="OBJECT_SYNC sequence builds object tree with all operations applied with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence builds object tree with all operations applied with text protocol" time="2.206" classname="OBJECT_SYNC sequence builds object tree with all operations applied with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence does not change references to existing objects" time="1.169" classname="OBJECT_SYNC sequence does not change references to existing objects">
    </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="0.260" classname="LiveCounter is initialized with initial value from OBJECT_SYNC sequence with web_socket binary protocol">
    </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="0.719" classname="LiveCounter is initialized with initial value from OBJECT_SYNC sequence with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter is initialized with initial value from OBJECT_SYNC sequence with comet binary protocol" time="0.663" classname="LiveCounter is initialized with initial value from OBJECT_SYNC sequence with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter is initialized with initial value from OBJECT_SYNC sequence with comet text protocol" time="0.285" classname="LiveCounter is initialized with initial value from OBJECT_SYNC sequence with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter is initialized with initial value from OBJECT_SYNC sequence with binary protocol" time="0.153" classname="LiveCounter is initialized with initial value from OBJECT_SYNC sequence with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter is initialized with initial value from OBJECT_SYNC sequence with text protocol" time="0.651" classname="LiveCounter is initialized with initial value from OBJECT_SYNC sequence with text protocol">
    </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="0.266" classname="LiveMap is initialized with initial value from OBJECT_SYNC sequence with web_socket binary protocol">
    </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="0.643" classname="LiveMap is initialized with initial value from OBJECT_SYNC sequence with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap is initialized with initial value from OBJECT_SYNC sequence with comet binary protocol" time="0.730" classname="LiveMap is initialized with initial value from OBJECT_SYNC sequence with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap is initialized with initial value from OBJECT_SYNC sequence with comet text protocol" time="0.151" classname="LiveMap is initialized with initial value from OBJECT_SYNC sequence with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap is initialized with initial value from OBJECT_SYNC sequence with binary protocol" time="0.662" classname="LiveMap is initialized with initial value from OBJECT_SYNC sequence with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap is initialized with initial value from OBJECT_SYNC sequence with text protocol" time="0.268" classname="LiveMap is initialized with initial value from OBJECT_SYNC sequence with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap can reference the same object in their keys with web_socket binary protocol" time="0.642" classname="LiveMap can reference the same object in their keys with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap can reference the same object in their keys with web_socket text protocol" time="0.718" classname="LiveMap can reference the same object in their keys with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap can reference the same object in their keys with comet binary protocol" time="0.728" classname="LiveMap can reference the same object in their keys with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap can reference the same object in their keys with comet text protocol" time="0.136" classname="LiveMap can reference the same object in their keys with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap can reference the same object in their keys with binary protocol" time="0.261" classname="LiveMap can reference the same object in their keys with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap can reference the same object in their keys with text protocol" time="0.266" classname="LiveMap can reference the same object in their keys with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property creates tombstoned object" time="0.640" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property creates tombstoned object">
    </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.684" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes 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 deletes existing object with web_socket text protocol" time="0.297" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes 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 deletes existing object with comet binary protocol" time="0.157" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with comet text protocol" time="0.147" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with binary protocol" time="0.702" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with binary protocol">
    </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.283" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property deletes existing object with 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 web_socket binary protocol" time="0.742" 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.729" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with comet binary protocol" time="0.292" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with comet text protocol" time="0.291" classname="OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin OBJECT_SYNC sequence with object state &quot;tombstone&quot; property triggers subscription callback for existing object with binary protocol" time="0.730" 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.676" 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.681" classname="can apply MAP_CREATE with primitives object operation messages with web_socket binary protocol">
    </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.154" classname="can apply MAP_CREATE with primitives object operation messages with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with primitives object operation messages with comet binary protocol" time="0.727" classname="can apply MAP_CREATE with primitives object operation messages with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with primitives object operation messages with comet text protocol" time="0.300" classname="can apply MAP_CREATE with primitives object operation messages with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with primitives object operation messages with binary protocol" time="0.670" classname="can apply MAP_CREATE with primitives object operation messages with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with primitives object operation messages with text protocol" time="0.725" classname="can apply MAP_CREATE with primitives object operation messages with text protocol">
    </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.700" classname="can apply MAP_CREATE with object ids object operation messages with web_socket binary protocol">
    </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.180" classname="can apply MAP_CREATE with object ids object operation messages with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with object ids object operation messages with comet binary protocol" time="0.321" classname="can apply MAP_CREATE with object ids object operation messages with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with object ids object operation messages with comet text protocol" time="0.171" classname="can apply MAP_CREATE with object ids object operation messages with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with object ids object operation messages with binary protocol" time="0.825" classname="can apply MAP_CREATE with object ids object operation messages with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_CREATE with object ids object operation messages with text protocol" time="0.166" classname="can apply MAP_CREATE with object ids object operation messages with text protocol">
    </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.643" classname="MAP_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 MAP_SET with primitives object operation messages with web_socket binary protocol" time="0.191" classname="can apply MAP_SET with primitives object operation messages with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with primitives object operation messages with web_socket text protocol" time="0.270" classname="can apply MAP_SET with primitives object operation messages with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with primitives object operation messages with comet binary protocol" time="0.293" classname="can apply MAP_SET with primitives object operation messages with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with primitives object operation messages with comet text protocol" time="0.752" classname="can apply MAP_SET with primitives object operation messages with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with primitives object operation messages with binary protocol" time="0.147" classname="can apply MAP_SET with primitives object operation messages with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with primitives object operation messages with text protocol" time="0.316" classname="can apply MAP_SET with primitives object operation messages with text protocol">
    </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.196" classname="can apply MAP_SET with object ids object operation messages with web_socket binary protocol">
    </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.704" classname="can apply MAP_SET with object ids object operation messages with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with object ids object operation messages with comet binary protocol" time="0.240" classname="can apply MAP_SET with object ids object operation messages with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with object ids object operation messages with comet text protocol" time="0.369" classname="can apply MAP_SET with object ids object operation messages with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with object ids object operation messages with binary protocol" time="0.326" classname="can apply MAP_SET with object ids object operation messages with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_SET with object ids object operation messages with text protocol" time="0.724" classname="can apply MAP_SET with object ids object operation messages with text protocol">
    </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.132" classname="MAP_SET 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 MAP_REMOVE object operation messages with web_socket binary protocol" time="0.175" classname="can apply MAP_REMOVE object operation messages with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_REMOVE object operation messages with web_socket text protocol" time="0.691" classname="can apply MAP_REMOVE object operation messages with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_REMOVE object operation messages with comet binary protocol" time="0.335" classname="can apply MAP_REMOVE object operation messages with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_REMOVE object operation messages with comet text protocol" time="0.742" classname="can apply MAP_REMOVE object operation messages with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_REMOVE object operation messages with binary protocol" time="0.188" classname="can apply MAP_REMOVE object operation messages with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply MAP_REMOVE object operation messages with text protocol" time="0.201" classname="can apply MAP_REMOVE object operation messages with text protocol">
    </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.695" classname="MAP_REMOVE 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_CREATE object operation messages with web_socket binary protocol" time="0.293" 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.322" classname="can apply COUNTER_CREATE object operation messages with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_CREATE object operation messages with comet binary protocol" time="0.755" classname="can apply COUNTER_CREATE object operation messages with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_CREATE object operation messages with comet text protocol" time="0.803" classname="can apply COUNTER_CREATE object operation messages with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_CREATE object operation messages with binary protocol" time="0.324" 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.306" 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.133" 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.923" 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.326" classname="can apply COUNTER_INC object operation messages with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_INC object operation messages with comet binary protocol" time="0.494" classname="can apply COUNTER_INC object operation messages with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_INC object operation messages with comet text protocol" time="0.972" classname="can apply COUNTER_INC object operation messages with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can apply COUNTER_INC object operation messages with binary protocol" time="0.992" 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.363" 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.645" 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.185" 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.644" 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.256" 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.309" classname="OBJECT_DELETE triggers subscription callback with deleted data">
    </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.717" 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.797" 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.175" 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.121" classname="buffered object operation messages are applied when OBJECT_SYNC sequence ends">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin buffered object operation messages are discarded when new OBJECT_SYNC sequence starts" time="0.701" classname="buffered object operation messages are discarded when new OBJECT_SYNC sequence starts">
    </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.118" classname="buffered object operation messages are applied based on the site timeserials vector of the object">
    </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.298" classname="subsequent object operation messages are applied immediately after OBJECT_SYNC ended and buffers are applied">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.increment sends COUNTER_INC operation with web_socket binary protocol" time="4.756" 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.194" classname="LiveCounter.increment sends COUNTER_INC operation with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.increment sends COUNTER_INC operation with comet binary protocol" time="4.201" classname="LiveCounter.increment sends COUNTER_INC operation with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.increment sends COUNTER_INC operation with comet text protocol" time="4.186" classname="LiveCounter.increment sends COUNTER_INC operation with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.increment sends COUNTER_INC operation with binary protocol" time="4.307" 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.381" 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.676" 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.251" 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.746" classname="LiveCounter.decrement sends COUNTER_INC operation with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.decrement sends COUNTER_INC operation with comet binary protocol" time="4.802" classname="LiveCounter.decrement sends COUNTER_INC operation with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.decrement sends COUNTER_INC operation with comet text protocol" time="4.186" classname="LiveCounter.decrement sends COUNTER_INC operation with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter.decrement sends COUNTER_INC operation with binary protocol" time="4.751" 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.753" 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.763" 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="0.689" classname="LiveMap.set sends MAP_SET operation with primitive values with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with primitive values with web_socket text protocol" time="1.184" classname="LiveMap.set sends MAP_SET operation with primitive values with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with primitive values with comet binary protocol" time="0.872" classname="LiveMap.set sends MAP_SET operation with primitive values with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with primitive values with comet text protocol" time="1.218" classname="LiveMap.set sends MAP_SET operation with primitive values with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with primitive values with binary protocol" time="1.157" classname="LiveMap.set sends MAP_SET operation with primitive values with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with primitive values with text protocol" time="0.776" classname="LiveMap.set sends MAP_SET operation with primitive values with text protocol">
    </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="0.842" 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="1.212" classname="LiveMap.set sends MAP_SET operation with reference to another LiveObject with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with reference to another LiveObject with comet binary protocol" time="0.705" classname="LiveMap.set sends MAP_SET operation with reference to another LiveObject with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with reference to another LiveObject with comet text protocol" time="0.857" classname="LiveMap.set sends MAP_SET operation with reference to another LiveObject with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.set sends MAP_SET operation with reference to another LiveObject with binary protocol" time="1.205" 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.707" 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.152" 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.199" classname="LiveMap.remove sends MAP_REMOVE operation with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.remove sends MAP_REMOVE operation with web_socket text protocol" time="0.789" classname="LiveMap.remove sends MAP_REMOVE operation with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.remove sends MAP_REMOVE operation with comet binary protocol" time="0.680" classname="LiveMap.remove sends MAP_REMOVE operation with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.remove sends MAP_REMOVE operation with comet text protocol" time="1.259" classname="LiveMap.remove sends MAP_REMOVE operation with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.remove sends MAP_REMOVE operation with binary protocol" time="0.787" classname="LiveMap.remove sends MAP_REMOVE operation with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.remove sends MAP_REMOVE operation with text protocol" time="0.806" classname="LiveMap.remove sends MAP_REMOVE operation with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap.remove throws on invalid input" time="0.265" classname="LiveMap.remove throws on invalid input">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter sends COUNTER_CREATE operation with web_socket binary protocol" time="0.644" classname="Objects.createCounter sends COUNTER_CREATE operation with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter sends COUNTER_CREATE operation with web_socket text protocol" time="1.228" classname="Objects.createCounter sends COUNTER_CREATE operation with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter sends COUNTER_CREATE operation with comet binary protocol" time="0.661" classname="Objects.createCounter sends COUNTER_CREATE operation with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter sends COUNTER_CREATE operation with comet text protocol" time="1.222" classname="Objects.createCounter sends COUNTER_CREATE operation with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter sends COUNTER_CREATE operation with binary protocol" time="1.157" 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.777" 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.163" classname="LiveCounter created with Objects.createCounter can be assigned to the object tree with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter created with Objects.createCounter can be assigned to the object tree with web_socket text protocol" time="1.246" classname="LiveCounter created with Objects.createCounter can be assigned to the object tree with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter created with Objects.createCounter can be assigned to the object tree with comet binary protocol" time="0.700" classname="LiveCounter created with Objects.createCounter can be assigned to the object tree with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter created with Objects.createCounter can be assigned to the object tree with comet text protocol" time="1.223" classname="LiveCounter created with Objects.createCounter can be assigned to the object tree with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveCounter created with Objects.createCounter can be assigned to the object tree with binary protocol" time="0.641" 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.785" 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.705" 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.648" 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.728" classname="Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with comet binary protocol" time="0.133" classname="Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with comet text protocol" time="0.663" classname="Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createCounter can return LiveCounter with initial value from applied CREATE operation with binary protocol" time="0.288" 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.704" 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.710" 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.259" 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.796" classname="Objects.createMap sends MAP_CREATE operation with primitive values with web_socket binary protocol">
    </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.233" classname="Objects.createMap sends MAP_CREATE operation with primitive values with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with primitive values with comet binary protocol" time="1.242" classname="Objects.createMap sends MAP_CREATE operation with primitive values with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with primitive values with comet text protocol" time="1.170" classname="Objects.createMap sends MAP_CREATE operation with primitive values with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with primitive values with binary protocol" time="0.641" classname="Objects.createMap sends MAP_CREATE operation with primitive values with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with primitive values with text protocol" time="1.227" classname="Objects.createMap sends MAP_CREATE operation with primitive values with text protocol">
    </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.711" 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.208" classname="Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with comet binary protocol" time="0.763" classname="Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with comet text protocol" time="0.374" classname="Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap sends MAP_CREATE operation with reference to another LiveObject with binary protocol" time="0.792" 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.720" 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.142" classname="LiveMap created with Objects.createMap can be assigned to the object tree with web_socket binary 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 text protocol" time="1.281" classname="LiveMap created with Objects.createMap can be assigned to the object tree with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap created with Objects.createMap can be assigned to the object tree with comet binary protocol" time="1.738" classname="LiveMap created with Objects.createMap can be assigned to the object tree with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin LiveMap created with Objects.createMap can be assigned to the object tree with comet text protocol" time="1.151" classname="LiveMap created with Objects.createMap can be assigned to the object tree with comet text protocol">
    </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.665" classname="LiveMap created with Objects.createMap can be assigned to the object tree with binary protocol">
    </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.132" classname="LiveMap created with Objects.createMap can be assigned to the object tree with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap can return LiveMap with initial value without applying CREATE operation" time="0.275" classname="Objects.createMap can return LiveMap with initial value without applying CREATE operation">
    </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.136" classname="Objects.createMap can return LiveMap with initial value from applied CREATE operation with web_socket binary protocol">
    </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.755" classname="Objects.createMap can return LiveMap with initial value from applied CREATE operation with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap can return LiveMap with initial value from applied CREATE operation with comet binary protocol" time="0.704" classname="Objects.createMap can return LiveMap with initial value from applied CREATE operation with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap can return LiveMap with initial value from applied CREATE operation with comet text protocol" time="0.663" classname="Objects.createMap can return LiveMap with initial value from applied CREATE operation with comet text protocol">
    </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.648" classname="Objects.createMap can return LiveMap with initial value from applied CREATE operation with binary protocol">
    </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.714" classname="Objects.createMap can return LiveMap 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 LiveMap from Objects.createMap when CREATE op is received" time="0.653" classname="initial value is not double counted for LiveMap from Objects.createMap when CREATE op is received">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin Objects.createMap throws on invalid input" time="0.642" classname="Objects.createMap throws on invalid input">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API getRoot method is synchronous" time="0.257" classname="batch API getRoot method is synchronous">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API .get method on a map returns BatchContext* wrappers for objects" time="2.157" 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.270" classname="batch API access API methods on objects work and are synchronous">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API write API methods on objects do not mutate objects inside the batch callback" time="2.733" classname="batch API write API methods on objects do not mutate objects inside the batch callback">
    </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.337" classname="batch API scheduled operations are applied when batch callback is finished with web_socket binary protocol">
    </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.282" classname="batch API scheduled operations are applied when batch callback is finished with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API scheduled operations are applied when batch callback is finished with comet binary protocol" time="2.298" classname="batch API scheduled operations are applied when batch callback is finished with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API scheduled operations are applied when batch callback is finished with comet text protocol" time="2.162" classname="batch API scheduled operations are applied when batch callback is finished with comet text protocol">
    </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.149" classname="batch API scheduled operations are applied when batch callback is finished with binary protocol">
    </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.657" classname="batch API scheduled operations are applied when batch callback is finished with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API can be called without scheduling any operations" time="0.122" 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.243" classname="batch API scheduled operations can be canceled by throwing an error in the batch callback">
    </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.242" classname="batch API batch context and derived objects can&apos;t be interacted with after the batch call">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin batch API batch context and derived objects can&apos;t be interacted with after error was thrown from batch callback" time="2.222" 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.258" classname="LiveMap enumeration">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin BatchContextLiveMap enumeration" time="0.125" 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.220" 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.197" classname="can subscribe to the incoming COUNTER_INC operation on a LiveCounter with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming COUNTER_INC operation on a LiveCounter with comet binary protocol" time="0.731" classname="can subscribe to the incoming COUNTER_INC operation on a LiveCounter with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming COUNTER_INC operation on a LiveCounter with comet text protocol" time="0.224" classname="can subscribe to the incoming COUNTER_INC operation on a LiveCounter with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming COUNTER_INC operation on a LiveCounter with binary protocol" time="0.216" 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.200" classname="can subscribe to the incoming COUNTER_INC operation on a LiveCounter with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveCounter with web_socket binary protocol" time="0.829" 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.401" classname="can subscribe to multiple incoming operations on a LiveCounter with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveCounter with comet binary protocol" time="0.795" classname="can subscribe to multiple incoming operations on a LiveCounter with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveCounter with comet text protocol" time="0.379" classname="can subscribe to multiple incoming operations on a LiveCounter with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveCounter with binary protocol" time="0.815" 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.742" 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="0.767" classname="can subscribe to the incoming MAP_SET operation on a LiveMap with web_socket binary protocol">
    </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="0.205" classname="can subscribe to the incoming MAP_SET operation on a LiveMap with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_SET operation on a LiveMap with comet binary protocol" time="0.355" classname="can subscribe to the incoming MAP_SET operation on a LiveMap with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_SET operation on a LiveMap with comet text protocol" time="0.788" classname="can subscribe to the incoming MAP_SET operation on a LiveMap with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_SET operation on a LiveMap with binary protocol" time="0.708" classname="can subscribe to the incoming MAP_SET operation on a LiveMap with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_SET operation on a LiveMap with text protocol" time="0.319" classname="can subscribe to the incoming MAP_SET operation on a LiveMap with text protocol">
    </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.198" 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.312" classname="can subscribe to the incoming MAP_REMOVE operation on a LiveMap with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_REMOVE operation on a LiveMap with comet binary protocol" time="0.205" classname="can subscribe to the incoming MAP_REMOVE operation on a LiveMap with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_REMOVE operation on a LiveMap with comet text protocol" time="0.725" classname="can subscribe to the incoming MAP_REMOVE operation on a LiveMap with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to the incoming MAP_REMOVE operation on a LiveMap with binary protocol" time="0.774" 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.702" 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.827" classname="can subscribe to multiple incoming operations on a LiveMap with web_socket binary protocol">
    </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.390" classname="can subscribe to multiple incoming operations on a LiveMap with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveMap with comet binary protocol" time="0.255" classname="can subscribe to multiple incoming operations on a LiveMap with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveMap with comet text protocol" time="0.253" classname="can subscribe to multiple incoming operations on a LiveMap with comet text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveMap with binary protocol" time="0.773" classname="can subscribe to multiple incoming operations on a LiveMap with binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can subscribe to multiple incoming operations on a LiveMap with text protocol" time="0.843" classname="can subscribe to multiple incoming operations on a LiveMap with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can unsubscribe from LiveCounter updates via returned &quot;unsubscribe&quot; callback" time="0.205" 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.874" 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.861" 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="0.745" classname="can unsubscribe from LiveMap updates via returned &quot;unsubscribe&quot; callback">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can unsubscribe from LiveMap updates via LiveMap.unsubscribe() call" time="0.857" classname="can unsubscribe from LiveMap updates via LiveMap.unsubscribe() call">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin can remove all LiveMap update listeners via LiveMap.unsubscribeAll() call" time="0.408" classname="can remove all LiveMap update listeners via LiveMap.unsubscribeAll() call">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin tombstoned object is removed from the pool after the GC grace period" time="1.510" 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="1.007" classname="tombstoned map entry is removed from the LiveMap after the GC grace period with web_socket binary protocol">
    </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="1.507" classname="tombstoned map entry is removed from the LiveMap after the GC grace period with web_socket text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin tombstoned map entry is removed from the LiveMap after the GC grace period with comet binary protocol" time="1.502" classname="tombstoned map entry is removed from the LiveMap after the GC grace period with comet binary protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin tombstoned map entry is removed from the LiveMap after the GC grace period with comet text protocol" time="1.002" classname="tombstoned map entry is removed from the LiveMap after the GC grace period with comet text protocol">
    </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="1.007" classname="tombstoned map entry is removed from the LiveMap after the GC grace period with binary protocol">
    </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="1.006" classname="tombstoned map entry is removed from the LiveMap after the GC grace period with text protocol">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin public API throws missing object modes error when attached without correct modes" time="2.231" 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.228" 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="1.773" classname="public API throws invalid channel state error when channel DETACHED">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin public API throws invalid channel state error when channel FAILED" time="1.817" 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.653" classname="public write API throws invalid channel state error when channel SUSPENDED">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin public write API throws invalid channel option when &quot;echoMessages&quot; is disabled" time="1.640" classname="public write API throws invalid channel option when &quot;echoMessages&quot; is disabled">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin object message publish respects connectionDetails.maxMessageSize" time="0.259" classname="object message publish respects connectionDetails.maxMessageSize">
    </testcase>
  </testsuite>
  <testsuite name="ObjectMessage message size" timestamp="2025-06-19T16:43:06" tests="24" file="/home/runner/work/ably-js/ably-js/test/realtime/objects.test.js" time="0.015" failures="0">
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size client id" time="0.000" classname="client id">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size extras" time="0.000" classname="extras">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size object id" time="0.000" classname="object id">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size nonce" time="0.001" classname="nonce">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size initial value" time="0.000" classname="initial value">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map create op no payload" time="0.001" classname="map create op no payload">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map create op with object payload" time="0.000" classname="map create op with object payload">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map create op with string payload" time="0.000" classname="map create op with string payload">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map create op with bytes payload" time="0.000" classname="map create op with bytes payload">
    </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">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map create op with double payload" time="0.001" classname="map create op with double payload">
    </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.001" 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">
    </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">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map set operation value=boolean true" time="0.000" classname="map set operation value=boolean true">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map set operation value=boolean false" time="0.000" classname="map set operation value=boolean false">
    </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">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map set operation value=double 0" time="0.000" classname="map set operation value=double 0">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size map object" time="0.000" classname="map object">
    </testcase>
    <testcase name="realtime/objects Realtime with Objects plugin ObjectMessage message size counter create op no payload" time="0.001" 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.001" 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>
  <testsuite name="realtime/presence" timestamp="2025-06-19T16:43:06" tests="36" file="/home/runner/work/ably-js/ably-js/test/realtime/presence.test.js" time="20.379" failures="0">
    <testcase name="realtime/presence presenceEnterWithoutAttach" time="0.088" classname="presenceEnterWithoutAttach">
    </testcase>
    <testcase name="realtime/presence presenceEnterWithoutConnect" time="0.158" classname="presenceEnterWithoutConnect">
    </testcase>
    <testcase name="realtime/presence presenceEnterWithCallback" time="0.129" classname="presenceEnterWithCallback">
    </testcase>
    <testcase name="realtime/presence presenceEnterWithNothing" time="0.080" classname="presenceEnterWithNothing">
    </testcase>
    <testcase name="realtime/presence presenceEnterWithData" time="0.084" classname="presenceEnterWithData">
    </testcase>
    <testcase name="realtime/presence presenceMessageAction" time="0.045" classname="presenceMessageAction">
    </testcase>
    <testcase name="realtime/presence presenceMessageExtras" time="0.060" classname="presenceMessageExtras">
    </testcase>
    <testcase name="realtime/presence presenceEnterDetachEnter" time="0.604" classname="presenceEnterDetachEnter">
    </testcase>
    <testcase name="realtime/presence presenceEnterInvalid" time="0.038" classname="presenceEnterInvalid">
    </testcase>
    <testcase name="realtime/presence presenceEnterAndLeave" time="0.547" classname="presenceEnterAndLeave">
    </testcase>
    <testcase name="realtime/presence presenceEnterUpdate" time="0.597" classname="presenceEnterUpdate">
    </testcase>
    <testcase name="realtime/presence presenceEnterGet" time="0.120" classname="presenceEnterGet">
    </testcase>
    <testcase name="realtime/presence presenceSubscribeUnattached" time="0.079" classname="presenceSubscribeUnattached">
    </testcase>
    <testcase name="realtime/presence presenceGetUnattached" time="0.139" classname="presenceGetUnattached">
    </testcase>
    <testcase name="realtime/presence presenceEnterLeaveGet" time="0.601" classname="presenceEnterLeaveGet">
    </testcase>
    <testcase name="realtime/presence presenceHistory" time="0.588" classname="presenceHistory">
    </testcase>
    <testcase name="realtime/presence presenceSecondConnection" time="0.151" classname="presenceSecondConnection">
    </testcase>
    <testcase name="realtime/presence presenceTwoMembers" time="0.122" classname="presenceTwoMembers">
    </testcase>
    <testcase name="realtime/presence presenceEnterAfterClose" time="0.150" classname="presenceEnterAfterClose">
    </testcase>
    <testcase name="realtime/presence presenceEnterClosed" time="0.027" classname="presenceEnterClosed">
    </testcase>
    <testcase name="realtime/presence presenceClientIdIsImplicit" time="0.040" classname="presenceClientIdIsImplicit">
    </testcase>
    <testcase name="realtime/presence presenceEncoding" time="0.075" classname="presenceEncoding">
    </testcase>
    <testcase name="realtime/presence presence_enter_inherited_clientid" time="0.090" classname="presence_enter_inherited_clientid">
    </testcase>
    <testcase name="realtime/presence presence_enter_before_know_clientid" time="0.106" classname="presence_enter_before_know_clientid">
    </testcase>
    <testcase name="realtime/presence presence_refresh_on_detach" time="0.558" classname="presence_refresh_on_detach">
    </testcase>
    <testcase name="realtime/presence presence_detach_during_sync" time="0.073" classname="presence_detach_during_sync">
    </testcase>
    <testcase name="realtime/presence presence_auto_reenter" time="0.184" classname="presence_auto_reenter">
    </testcase>
    <testcase name="realtime/presence presence_auto_reenter_different_connid" time="5.144" classname="presence_auto_reenter_different_connid">
    </testcase>
    <testcase name="realtime/presence multiple_pending" time="0.150" classname="multiple_pending">
    </testcase>
    <testcase name="realtime/presence leave_published_for_member_missing_from_sync" time="0.133" classname="leave_published_for_member_missing_from_sync">
    </testcase>
    <testcase name="realtime/presence leave_published_for_members_on_presenceless_attached" time="0.127" classname="leave_published_for_members_on_presenceless_attached">
    </testcase>
    <testcase name="realtime/presence suspended_preserves_presence" time="1.160" classname="suspended_preserves_presence">
    </testcase>
    <testcase name="realtime/presence presence_many_updates" time="8.076" classname="presence_many_updates">
    </testcase>
  </testsuite>
  <testsuite name="realtime/reauth" timestamp="2025-06-19T16:43:27" tests="24" file="/home/runner/work/ably-js/ably-js/test/realtime/reauth.test.js" time="4.893" failures="0">
    <testcase name="realtime/reauth reauthCapabilityUpgradeNewChannel with web_socket binary protocol" time="0.073" classname="reauthCapabilityUpgradeNewChannel with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeNewChannel with web_socket text protocol" time="0.061" classname="reauthCapabilityUpgradeNewChannel with web_socket text protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeNewChannel with comet binary protocol" time="0.096" classname="reauthCapabilityUpgradeNewChannel with comet binary protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeNewChannel with comet text protocol" time="0.096" classname="reauthCapabilityUpgradeNewChannel with comet text protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeNewChannel with binary protocol" time="0.080" classname="reauthCapabilityUpgradeNewChannel with binary protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeNewChannel with text protocol" time="0.062" classname="reauthCapabilityUpgradeNewChannel with text protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradeFullChannel with web_socket binary protocol" time="0.076" classname="reauthCapabilityDowngradeFullChannel with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradeFullChannel with web_socket text protocol" time="0.075" classname="reauthCapabilityDowngradeFullChannel with web_socket text protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradeFullChannel with comet binary protocol" time="0.094" classname="reauthCapabilityDowngradeFullChannel with comet binary protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradeFullChannel with comet text protocol" time="0.105" classname="reauthCapabilityDowngradeFullChannel with comet text protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradeFullChannel with binary protocol" time="0.098" classname="reauthCapabilityDowngradeFullChannel with binary protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradeFullChannel with text protocol" time="0.075" classname="reauthCapabilityDowngradeFullChannel with text protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeAddPublish with web_socket binary protocol" time="0.556" classname="reauthCapabilityUpgradeAddPublish with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeAddPublish with web_socket text protocol" time="0.550" classname="reauthCapabilityUpgradeAddPublish with web_socket text protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeAddPublish with comet binary protocol" time="0.571" classname="reauthCapabilityUpgradeAddPublish with comet binary protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeAddPublish with comet text protocol" time="0.566" classname="reauthCapabilityUpgradeAddPublish with comet text protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeAddPublish with binary protocol" time="0.548" classname="reauthCapabilityUpgradeAddPublish with binary protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityUpgradeAddPublish with text protocol" time="0.555" classname="reauthCapabilityUpgradeAddPublish with text protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradePublish with web_socket binary protocol" time="0.074" classname="reauthCapabilityDowngradePublish with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradePublish with web_socket text protocol" time="0.086" classname="reauthCapabilityDowngradePublish with web_socket text protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradePublish with comet binary protocol" time="0.114" classname="reauthCapabilityDowngradePublish with comet binary protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradePublish with comet text protocol" time="0.125" classname="reauthCapabilityDowngradePublish with comet text protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradePublish with binary protocol" time="0.069" classname="reauthCapabilityDowngradePublish with binary protocol">
    </testcase>
    <testcase name="realtime/reauth reauthCapabilityDowngradePublish with text protocol" time="0.071" classname="reauthCapabilityDowngradePublish with text protocol">
    </testcase>
  </testsuite>
  <testsuite name="realtime/resume" timestamp="2025-06-19T16:43:31" tests="35" file="/home/runner/work/ably-js/ably-js/test/realtime/resume.test.js" time="144.383" failures="0">
    <testcase name="realtime/resume resume_inactive with web_socket binary protocol" time="11.601" classname="resume_inactive with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/resume resume_inactive with web_socket text protocol" time="11.627" classname="resume_inactive with web_socket text protocol">
    </testcase>
    <testcase name="realtime/resume resume_inactive with comet binary protocol" time="11.622" classname="resume_inactive with comet binary protocol">
    </testcase>
    <testcase name="realtime/resume resume_inactive with comet text protocol" time="11.626" classname="resume_inactive with comet text protocol">
    </testcase>
    <testcase name="realtime/resume resume_inactive with binary protocol" time="11.589" classname="resume_inactive with binary protocol">
    </testcase>
    <testcase name="realtime/resume resume_inactive with text protocol" time="11.612" classname="resume_inactive with text protocol">
    </testcase>
    <testcase name="realtime/resume resume_active with web_socket binary protocol" time="11.140" classname="resume_active with web_socket binary protocol">
    </testcase>
    <testcase name="realtime/resume resume_active with web_socket text protocol" time="11.191" classname="resume_active with web_socket text protocol">
    </testcase>
    <testcase name="realtime/resume resume_active with comet binary protocol" time="11.184" classname="resume_active with comet binary protocol">
    </testcase>
    <testcase name="realtime/resume resume_active with comet text protocol" time="11.177" classname="resume_active with comet text protocol">
    </testcase>
    <testcase name="realtime/resume resume_active with binary protocol" time="11.204" classname="resume_active with binary protocol">
    </testcase>
    <testcase name="realtime/resume resume_active with text protocol" time="11.133" classname="resume_active with text protocol">
    </testcase>
    <testcase name="realtime/resume channel_resumed_flag" time="0.115" classname="channel_resumed_flag">
    </testcase>
    <testcase name="realtime/resume no_resume_once_suspended" time="0.041" classname="no_resume_once_suspended">
    </testcase>
    <testcase name="realtime/resume no_resume_last_activity" time="0.056" classname="no_resume_last_activity">
    </testcase>
    <testcase name="realtime/resume resume_rewind_1" time="7.169" classname="resume_rewind_1">
    </testcase>
    <testcase name="realtime/resume recover multiple channels" time="0.284" classname="recover multiple channels">
    </testcase>
  </testsuite>
  <testsuite name="realtime/sync" timestamp="2025-06-19T16:45:56" tests="6" file="/home/runner/work/ably-js/ably-js/test/realtime/sync.test.js" time="0.672" failures="0">
    <testcase name="realtime/sync sync_existing_set" time="0.003" classname="sync_existing_set">
    </testcase>
    <testcase name="realtime/sync sync_member_arrives_in_middle" time="0.000" classname="sync_member_arrives_in_middle">
    </testcase>
    <testcase name="realtime/sync sync_member_arrives_normally_after_came_in_sync" time="0.000" classname="sync_member_arrives_normally_after_came_in_sync">
    </testcase>
    <testcase name="realtime/sync sync_member_arrives_normally_before_comes_in_sync" time="0.001" classname="sync_member_arrives_normally_before_comes_in_sync">
    </testcase>
    <testcase name="realtime/sync presence_ordering" time="0.001" classname="presence_ordering">
    </testcase>
    <testcase name="realtime/sync presence_sync_interruptus" time="0.666" classname="presence_sync_interruptus">
    </testcase>
  </testsuite>
  <testsuite name="realtime/transports" timestamp="2025-06-19T16:45:57" tests="6" file="/home/runner/work/ably-js/ably-js/test/realtime/transports.test.js" time="21.201" failures="0">
    <testcase name="realtime/transports websocket_is_default" time="0.031" classname="websocket_is_default">
    </testcase>
    <testcase name="realtime/transports no_ws_connectivity" time="3.019" classname="no_ws_connectivity">
    </testcase>
    <testcase name="realtime/transports ws_primary_host_fails" time="0.045" classname="ws_primary_host_fails">
    </testcase>
    <testcase name="realtime/transports no_internet_connectivity" time="1.253" classname="no_internet_connectivity">
    </testcase>
    <testcase name="realtime/transports no_websocket_or_base_transport" time="3.003" classname="no_websocket_or_base_transport">
    </testcase>
    <testcase name="realtime/transports ws_can_reconnect_after_ws_connectivity_fail" time="13.847" classname="ws_can_reconnect_after_ws_connectivity_fail">
    </testcase>
  </testsuite>
  <testsuite name="incremental backoff and jitter" timestamp="2025-06-19T16:46:18" tests="1" file="/home/runner/work/ably-js/ably-js/test/realtime/utils.test.js" time="0.002" failures="0">
    <testcase name="incremental backoff and jitter should calculate retry timeouts using incremental backoff and jitter" time="0.002" classname="should calculate retry timeouts using incremental backoff and jitter">
    </testcase>
  </testsuite>
  <testsuite name="rest/api" timestamp="2025-06-19T16:46:18" tests="5" file="/home/runner/work/ably-js/ably-js/test/rest/api.test.js" time="0.002" failures="0">
    <testcase name="rest/api Client constructors" time="0.000" classname="Client constructors">
    </testcase>
    <testcase name="rest/api constructor without any arguments" time="0.001" classname="constructor without any arguments">
    </testcase>
    <testcase name="rest/api Crypto" time="0.000" classname="Crypto">
    </testcase>
    <testcase name="rest/api Message" time="0.000" classname="Message">
    </testcase>
    <testcase name="rest/api PresenceMessage" time="0.000" classname="PresenceMessage">
    </testcase>
  </testsuite>
  <testsuite name="rest/auth" timestamp="2025-06-19T16:46:18" tests="32" file="/home/runner/work/ably-js/ably-js/test/rest/auth.test.js" time="2.839" failures="2">
    <testcase name="rest/auth Base token generation case" time="0.023" classname="Base token generation case">
    </testcase>
    <testcase name="rest/auth Base token generation with options" time="0.021" classname="Base token generation with options">
    </testcase>
    <testcase name="rest/auth Generate token and init library with it" time="0.022" classname="Generate token and init library with it">
    </testcase>
    <testcase name="rest/auth Token generation with explicit timestamp" time="0.021" classname="Token generation with explicit timestamp">
    </testcase>
    <testcase name="rest/auth Token generation with invalid timestamp" time="0.010" classname="Token generation with invalid timestamp">
    </testcase>
    <testcase name="rest/auth Token generation with system timestamp" time="0.021" classname="Token generation with system timestamp">
    </testcase>
    <testcase name="rest/auth Token generation with duplicate nonce" time="0.031" classname="Token generation with duplicate nonce">
    </testcase>
    <testcase name="rest/auth Token generation with clientId" time="0.011" classname="Token generation with clientId">
    </testcase>
    <testcase name="rest/auth Token generation with empty string clientId should error" time="0.000" classname="Token generation with empty string clientId should error">
    </testcase>
    <testcase name="rest/auth Token generation with capability that subsets key capability" time="0.012" classname="Token generation with capability that subsets key capability">
    </testcase>
    <testcase name="rest/auth Token generation with specified key" time="0.497" classname="Token generation with specified key">
    </testcase>
    <testcase name="rest/auth Token generation with explicit auth" time="0.013" classname="Token generation with explicit auth">
    </testcase>
    <testcase name="rest/auth Token generation with explicit auth, different key" time="0.336" classname="Token generation with explicit auth, different key">
    </testcase>
    <testcase name="rest/auth Token generation with invalid mac" time="0.014" classname="Token generation with invalid mac">
    </testcase>
    <testcase name="rest/auth Token generation with defaultTokenParams set and no tokenParams passed in" time="0.012" classname="Token generation with defaultTokenParams set and no tokenParams passed in">
    </testcase>
    <testcase name="rest/auth Token generation: if tokenParams passed in, defaultTokenParams should be ignored altogether, not merged" time="0.059" classname="Token generation: if tokenParams passed in, defaultTokenParams should be ignored altogether, not merged">
    </testcase>
    <testcase name="rest/auth Authorize with different args" time="0.018" classname="Authorize with different args">
    </testcase>
    <testcase name="rest/auth Specify non-default ttl" time="0.020" classname="Specify non-default ttl">
    </testcase>
    <testcase name="rest/auth Should error with excessive ttl" time="0.011" classname="Should error with excessive ttl">
    </testcase>
    <testcase name="rest/auth Should error with negative ttl" time="0.020" classname="Should error with negative ttl">
    </testcase>
    <testcase name="rest/auth Should error with invalid ttl" time="0.028" classname="Should error with invalid ttl">
    </testcase>
    <testcase name="rest/auth createTokenRequest without authOptions" time="0.000" classname="createTokenRequest without authOptions">
    </testcase>
    <testcase name="rest/auth createTokenRequest uses the key it was initialized with if authOptions does not have a &quot;key&quot; key" time="0.000" classname="createTokenRequest uses the key it was initialized with if authOptions does not have a &quot;key&quot; key">
    </testcase>
    <testcase name="rest/auth createTokenRequest should serialise capability object as JSON" time="0.000" classname="createTokenRequest should serialise capability object as JSON">
    </testcase>
    <testcase name="rest/auth Basic rest JWT" time="0.116" classname="Basic rest JWT">
    </testcase>
    <testcase name="rest/auth Rest JWT with return type " time="0.118" classname="Rest JWT with return type ">
    </testcase>
    <testcase name="rest/auth Rest embedded JWT" time="0.077" classname="Rest embedded JWT">
      <failure message="Error response received from server: 500 body was: &lt;Buffer 7b 22 65 72 72 6f 72 22 3a 22 45 72 72 6f 72 3a 20 67 65 74 61 64 64 72 69 6e 66 6f 20 45 4e 4f 54 46 4f 55 4e 44 20 75 6e 64 65 66 69 6e 65 64 2d 72 ... 40 more bytes&gt;" type="Error"><![CDATA[Error: Error response received from server: 500 body was: <Buffer 7b 22 65 72 72 6f 72 22 3a 22 45 72 72 6f 72 3a 20 67 65 74 61 64 64 72 69 6e 66 6f 20 45 4e 4f 54 46 4f 55 4e 44 20 75 6e 64 65 66 69 6e 65 64 2d 72 ... 40 more bytes>
    at _a._handler (src/platform/nodejs/lib/util/http.ts:168:11)
    at _a.doUri (src/platform/nodejs/lib/util/http.ts:101:21)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at Http.doUri (src/common/types/http.ts:257:22)]]></failure>
    </testcase>
    <testcase name="rest/auth Rest embedded JWT with encryption" time="0.077" classname="Rest embedded JWT with encryption">
      <failure message="Error response received from server: 500 body was: &lt;Buffer 7b 22 65 72 72 6f 72 22 3a 22 45 72 72 6f 72 3a 20 67 65 74 61 64 64 72 69 6e 66 6f 20 45 4e 4f 54 46 4f 55 4e 44 20 75 6e 64 65 66 69 6e 65 64 2d 72 ... 40 more bytes&gt;" type="Error"><![CDATA[Error: Error response received from server: 500 body was: <Buffer 7b 22 65 72 72 6f 72 22 3a 22 45 72 72 6f 72 3a 20 67 65 74 61 64 64 72 69 6e 66 6f 20 45 4e 4f 54 46 4f 55 4e 44 20 75 6e 64 65 66 69 6e 65 64 2d 72 ... 40 more bytes>
    at _a._handler (src/platform/nodejs/lib/util/http.ts:168:11)
    at _a.doUri (src/platform/nodejs/lib/util/http.ts:101:21)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at Http.doUri (src/common/types/http.ts:257:22)]]></failure>
    </testcase>
    <testcase name="rest/auth JWT request with invalid key" time="0.588" classname="JWT request with invalid key">
    </testcase>
    <testcase name="rest/auth Rest JWT with authCallback" time="0.109" classname="Rest JWT with authCallback">
    </testcase>
    <testcase name="rest/auth Rest JWT with authCallback and invalid keys" time="0.409" classname="Rest JWT with authCallback and invalid keys">
    </testcase>
    <testcase name="rest/auth authCallback is only invoked once on concurrent auth" time="0.123" classname="authCallback is only invoked once on concurrent auth">
    </testcase>
  </testsuite>
  <testsuite name="rest/batchPublish" timestamp="2025-06-19T16:46:21" tests="0" file="/home/runner/work/ably-js/ably-js/test/rest/batch.test.js" time="0.000" failures="0">
  </testsuite>
  <testsuite name="when invoked with an array of specs" timestamp="2025-06-19T16:46:21" tests="1" file="/home/runner/work/ably-js/ably-js/test/rest/batch.test.js" time="0.067" failures="1">
    <testcase name="rest/batchPublish when invoked with an array of specs performs a batch publish and returns an array of results" time="0.066" classname="performs a batch publish and returns an array of results">
      <failure message="expected &apos;Nig3MZTpez:7284&apos; to include &apos;:0&apos;" type="AssertionError"><![CDATA[AssertionError: expected 'Nig3MZTpez:7284' to include ':0'
    at Context.<anonymous> (test/rest/batch.test.js:72:57)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)]]></failure>
    </testcase>
  </testsuite>
  <testsuite name="when invoked with a single spec" timestamp="2025-06-19T16:46:21" tests="1" file="/home/runner/work/ably-js/ably-js/test/rest/batch.test.js" time="0.027" failures="1">
    <testcase name="rest/batchPublish when invoked with a single spec performs a batch publish and returns a single result" time="0.026" classname="performs a batch publish and returns a single result">
      <failure message="expected &apos;jqNFh7224t:5180&apos; to include &apos;:0&apos;" type="AssertionError"><![CDATA[AssertionError: expected 'jqNFh7224t:5180' to include ':0'
    at Context.<anonymous> (test/rest/batch.test.js:150:53)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)]]></failure>
    </testcase>
  </testsuite>
  <testsuite name="rest/batchPresence" timestamp="2025-06-19T16:46:21" tests="1" file="/home/runner/work/ably-js/ably-js/test/rest/batch.test.js" time="0.572" failures="0">
    <testcase name="rest/batchPresence performs a batch presence fetch and returns a result" time="0.572" classname="performs a batch presence fetch and returns a result">
    </testcase>
  </testsuite>
  <testsuite name="rest/revokeTokens" timestamp="2025-06-19T16:46:21" tests="3" file="/home/runner/work/ably-js/ably-js/test/rest/batch.test.js" time="0.203" failures="0">
    <testcase name="rest/revokeTokens revokes tokens matching the given specifiers" time="0.163" classname="revokes tokens matching the given specifiers">
    </testcase>
    <testcase name="rest/revokeTokens accepts optional issuedBefore and allowReauthMargin parameters" time="0.039" classname="accepts optional issuedBefore and allowReauthMargin parameters">
    </testcase>
    <testcase name="rest/revokeTokens throws an error when using token auth" time="0.000" classname="throws an error when using token auth">
    </testcase>
  </testsuite>
  <testsuite name="rest/bufferutils" timestamp="2025-06-19T16:46:21" tests="2" file="/home/runner/work/ably-js/ably-js/test/rest/bufferutils.test.js" time="0.001" failures="0">
    <testcase name="rest/bufferutils Basic encoding and decoding" time="0.001" classname="Basic encoding and decoding">
    </testcase>
    <testcase name="rest/bufferutils BufferUtils return correct types" time="0.000" classname="BufferUtils return correct types">
    </testcase>
  </testsuite>
  <testsuite name="rest/capability" timestamp="2025-06-19T16:46:21" tests="14" file="/home/runner/work/ably-js/ably-js/test/rest/capability.test.js" time="0.813" failures="0">
    <testcase name="rest/capability Blanket intersection with specified key" time="0.285" classname="Blanket intersection with specified key">
    </testcase>
    <testcase name="rest/capability Equal intersection with specified key" time="0.344" classname="Equal intersection with specified key">
    </testcase>
    <testcase name="rest/capability Empty ops intersection" time="0.018" classname="Empty ops intersection">
    </testcase>
    <testcase name="rest/capability Empty paths intersection" time="0.016" classname="Empty paths intersection">
    </testcase>
    <testcase name="rest/capability Ops intersection non-empty" time="0.012" classname="Ops intersection non-empty">
    </testcase>
    <testcase name="rest/capability Paths intersection non-empty" time="0.023" classname="Paths intersection non-empty">
    </testcase>
    <testcase name="rest/capability Wildcard token with publish and subscribe key" time="0.012" classname="Wildcard token with publish and subscribe key">
    </testcase>
    <testcase name="rest/capability Publish and subscribe token with wildcard key" time="0.014" classname="Publish and subscribe token with wildcard key">
    </testcase>
    <testcase name="rest/capability Resources wildcard matching 1" time="0.013" classname="Resources wildcard matching 1">
    </testcase>
    <testcase name="rest/capability Resources wildcard matching 2" time="0.014" classname="Resources wildcard matching 2">
    </testcase>
    <testcase name="rest/capability Resources wildcard matching 3" time="0.013" classname="Resources wildcard matching 3">
    </testcase>
    <testcase name="rest/capability Invalid capabilities 1" time="0.011" classname="Invalid capabilities 1">
    </testcase>
    <testcase name="rest/capability Invalid capabilities 2" time="0.014" classname="Invalid capabilities 2">
    </testcase>
    <testcase name="rest/capability Invalid capabilities 3" time="0.010" classname="Invalid capabilities 3">
    </testcase>
  </testsuite>
  <testsuite name="rest/defaults" timestamp="2025-06-19T16:46:22" tests="12" file="/home/runner/work/ably-js/ably-js/test/rest/defaults.test.js" time="0.000" failures="0">
    <testcase name="rest/defaults Init with no endpoint-related options" time="0.000" classname="Init with no endpoint-related options">
    </testcase>
    <testcase name="rest/defaults Init with given endpoint" time="0.000" classname="Init with given endpoint">
    </testcase>
    <testcase name="rest/defaults Init with given endpoint as FQDN" time="0.001" classname="Init with given endpoint as FQDN">
    </testcase>
    <testcase name="rest/defaults Init with given endpoint as IPv4 address" time="0.000" classname="Init with given endpoint as IPv4 address">
    </testcase>
    <testcase name="rest/defaults Init with given endpoint as IPv6 address" time="0.000" classname="Init with given endpoint as IPv6 address">
    </testcase>
    <testcase name="rest/defaults Init with given endpoint as localhost" time="0.001" classname="Init with given endpoint as localhost">
    </testcase>
    <testcase name="rest/defaults Init with given environment" time="0.000" classname="Init with given environment">
    </testcase>
    <testcase name="rest/defaults Init with local environment and non-default ports" time="0.000" classname="Init with local environment and non-default ports">
    </testcase>
    <testcase name="rest/defaults Init with given host" time="0.000" classname="Init with given host">
    </testcase>
    <testcase name="rest/defaults Init with given restHost and realtimeHost" time="0.000" classname="Init with given restHost and realtimeHost">
    </testcase>
    <testcase name="rest/defaults Init with no endpoint-related options and given default environment" time="0.000" classname="Init with no endpoint-related options and given default environment">
    </testcase>
    <testcase name="rest/defaults closeOnUnload" time="0.000" classname="closeOnUnload">
    </testcase>
  </testsuite>
  <testsuite name="normaliseOptions with useBinaryProtocol == true" timestamp="2025-06-19T16:46:22" tests="0" file="/home/runner/work/ably-js/ably-js/test/rest/defaults.test.js" time="0.000" failures="0">
  </testsuite>
  <testsuite name="given MsgPack implementation" timestamp="2025-06-19T16:46:22" tests="1" file="/home/runner/work/ably-js/ably-js/test/rest/defaults.test.js" time="0.000" failures="0">
    <testcase name="rest/defaults normaliseOptions with useBinaryProtocol == true given MsgPack implementation maintains useBinaryProtocol as true" time="0.000" classname="maintains useBinaryProtocol as true">
    </testcase>
  </testsuite>
  <testsuite name="given no MsgPack implementation" timestamp="2025-06-19T16:46:22" tests="1" file="/home/runner/work/ably-js/ably-js/test/rest/defaults.test.js" time="0.001" failures="0">
    <testcase name="rest/defaults normaliseOptions with useBinaryProtocol == true given no MsgPack implementation changes useBinaryProtocol to false" time="0.000" classname="changes useBinaryProtocol to false">
    </testcase>
  </testsuite>
  <testsuite name="rest/fallbacks" timestamp="2025-06-19T16:46:22" tests="2" file="/home/runner/work/ably-js/ably-js/test/rest/fallbacks.test.js" time="0.000" failures="0">
    <testcase name="rest/fallbacks Store working fallback" time="6.040" classname="Store working fallback">
    </testcase>
    <testcase name="rest/fallbacks Should use the primary domain as the first attempted for every connection attempt" time="6.019" classname="Should use the primary domain as the first attempted for every connection attempt">
    </testcase>
  </testsuite>
  <testsuite name="Max elapsed time for host retries" timestamp="2025-06-19T16:46:34" tests="2" file="/home/runner/work/ably-js/ably-js/test/rest/fallbacks.test.js" time="3.006" failures="0">
    <testcase name="rest/fallbacks Max elapsed time for host retries can timeout after default host" time="1.002" classname="can timeout after default host">
    </testcase>
    <testcase name="rest/fallbacks Max elapsed time for host retries can timeout after fallback host retries" time="2.002" classname="can timeout after fallback host retries">
    </testcase>
  </testsuite>
  <testsuite name="rest/history" timestamp="2025-06-19T16:46:37" tests="13" file="/home/runner/work/ably-js/ably-js/test/rest/history.test.js" time="12.258" failures="0">
    <testcase name="rest/history history_simple with binary protocol" time="1.024" classname="history_simple with binary protocol">
    </testcase>
    <testcase name="rest/history history_simple with text protocol" time="1.021" classname="history_simple with text protocol">
    </testcase>
    <testcase name="rest/history history_multiple with binary protocol" time="1.025" classname="history_multiple with binary protocol">
    </testcase>
    <testcase name="rest/history history_multiple with text protocol" time="1.038" classname="history_multiple with text protocol">
    </testcase>
    <testcase name="rest/history history_simple_paginated_b with binary protocol" time="1.212" classname="history_simple_paginated_b with binary protocol">
    </testcase>
    <testcase name="rest/history history_simple_paginated_b with text protocol" time="1.209" classname="history_simple_paginated_b with text protocol">
    </testcase>
    <testcase name="rest/history history_simple_paginated_f" time="1.195" classname="history_simple_paginated_f">
    </testcase>
    <testcase name="rest/history history_multiple_paginated_b" time="1.187" classname="history_multiple_paginated_b">
    </testcase>
    <testcase name="rest/history history_multiple_paginated_f" time="1.111" classname="history_multiple_paginated_f">
    </testcase>
    <testcase name="rest/history history_encoding_errors with binary protocol" time="1.019" classname="history_encoding_errors with binary protocol">
    </testcase>
    <testcase name="rest/history history_encoding_errors with text protocol" time="1.019" classname="history_encoding_errors with text protocol">
    </testcase>
    <testcase name="rest/history history_no_next_page with binary protocol" time="0.095" classname="history_no_next_page with binary protocol">
    </testcase>
    <testcase name="rest/history history_no_next_page with text protocol" time="0.097" classname="history_no_next_page with text protocol">
    </testcase>
  </testsuite>
  <testsuite name="rest/http" timestamp="2025-06-19T16:46:50" tests="2" file="/home/runner/work/ably-js/ably-js/test/rest/http.test.js" time="0.147" failures="0">
    <testcase name="rest/http Should send X-Ably-Version and Ably-Agent headers in get/post requests" time="0.145" classname="Should send X-Ably-Version and Ably-Agent headers in get/post requests">
    </testcase>
    <testcase name="rest/http Should handle no content responses" time="0.001" classname="Should handle no content responses">
    </testcase>
  </testsuite>
  <testsuite name="rest/init" timestamp="2025-06-19T16:46:50" tests="6" file="/home/runner/work/ably-js/ably-js/test/rest/init.test.js" time="0.291" failures="0">
    <testcase name="rest/init Init with key string" time="0.000" classname="Init with key string">
    </testcase>
    <testcase name="rest/init Init with token string" time="0.289" classname="Init with token string">
    </testcase>
    <testcase name="rest/init Init with tls: false" time="0.000" classname="Init with tls: false">
    </testcase>
    <testcase name="rest/init Init with tls: true" time="0.000" classname="Init with tls: true">
    </testcase>
    <testcase name="rest/init Init without any tls key should enable tls" time="0.000" classname="Init without any tls key should enable tls">
    </testcase>
    <testcase name="rest/init Init with clientId set to &apos;*&apos; or anything other than a string or null should error" time="0.000" classname="Init with clientId set to &apos;*&apos; or anything other than a string or null should error">
    </testcase>
  </testsuite>
  <testsuite name="rest/message" timestamp="2025-06-19T16:46:50" tests="8" file="/home/runner/work/ably-js/ably-js/test/rest/message.test.js" time="0.655" failures="0">
    <testcase name="rest/message Should implicitly send clientId when authenticated with clientId" time="0.097" classname="Should implicitly send clientId when authenticated with clientId">
    </testcase>
    <testcase name="rest/message Should publish clientId when provided explicitly in message" time="0.093" classname="Should publish clientId when provided explicitly in message">
    </testcase>
    <testcase name="rest/message Should error when clientId sent in message is different than authenticated clientId" time="0.105" classname="Should error when clientId sent in message is different than authenticated clientId">
    </testcase>
    <testcase name="rest/message Should error when publishing message larger than maxMessageSize" time="0.001" classname="Should error when publishing message larger than maxMessageSize">
    </testcase>
    <testcase name="rest/message Should send correct IDs when idempotentRestPublishing set to false" time="0.093" classname="Should send correct IDs when idempotentRestPublishing set to false">
    </testcase>
    <testcase name="rest/message Should add IDs when automatic idempotent rest publishing option enabled" time="0.096" classname="Should add IDs when automatic idempotent rest publishing option enabled">
    </testcase>
    <testcase name="rest/message Rest publish params" time="0.110" classname="Rest publish params">
    </testcase>
    <testcase name="rest/message allows you to publish a message on behalf of a Realtime connection by setting connectionKey on the message" time="0.059" classname="allows you to publish a message on behalf of a Realtime connection by setting connectionKey on the message">
    </testcase>
  </testsuite>
  <testsuite name="rest/presence" timestamp="2025-06-19T16:46:51" tests="4" file="/home/runner/work/ably-js/ably-js/test/rest/presence.test.js" time="0.057" failures="0">
    <testcase name="rest/presence Presence get simple" time="0.015" classname="Presence get simple">
    </testcase>
    <testcase name="rest/presence Presence history simple" time="0.024" classname="Presence history simple">
    </testcase>
    <testcase name="rest/presence Presence message JSON serialisation" time="0.014" classname="Presence message JSON serialisation">
    </testcase>
    <testcase name="rest/presence Presence get limits and filtering" time="0.001" classname="Presence get limits and filtering">
    </testcase>
  </testsuite>
  <testsuite name="rest/push" timestamp="2025-06-19T16:46:51" tests="9" file="/home/runner/work/ably-js/ably-js/test/rest/push.test.js" time="0.000" failures="0">
    <testcase name="rest/push Get subscriptions" time="1.043" classname="Get subscriptions">
    </testcase>
    <testcase name="rest/push Publish" time="0.094" classname="Publish">
    </testcase>
    <testcase name="rest/push deviceRegistrations save" time="1.131" classname="deviceRegistrations save">
    </testcase>
    <testcase name="rest/push deviceRegistrations get and list" time="1.118" classname="deviceRegistrations get and list">
    </testcase>
    <testcase name="rest/push deviceRegistrations remove removeWhere" time="2.328" classname="deviceRegistrations remove removeWhere">
    </testcase>
    <testcase name="rest/push channelSubscriptions save" time="0.760" classname="channelSubscriptions save">
    </testcase>
    <testcase name="rest/push channelSubscriptions get" time="1.331" classname="channelSubscriptions get">
    </testcase>
    <testcase name="rest/push push_channelSubscriptions_remove" time="0.649" classname="push_channelSubscriptions_remove">
    </testcase>
    <testcase name="rest/push channelSubscriptions listChannels" time="0.944" classname="channelSubscriptions listChannels">
    </testcase>
  </testsuite>
  <testsuite name="push activation" timestamp="2025-06-19T16:47:00" tests="13" file="/home/runner/work/ably-js/ably-js/test/rest/push.test.js" time="8.779" failures="0">
    <testcase name="rest/push push activation push_activation_succeeds" time="0.410" classname="push_activation_succeeds">
    </testcase>
    <testcase name="rest/push push activation device_push" time="0.083" classname="device_push">
    </testcase>
    <testcase name="rest/push push activation subscribe_client" time="0.939" classname="subscribe_client">
    </testcase>
    <testcase name="rest/push push activation subscribe_client_without_clientId" time="0.471" classname="subscribe_client_without_clientId">
    </testcase>
    <testcase name="rest/push push activation unsubscribe_client" time="1.809" classname="unsubscribe_client">
    </testcase>
    <testcase name="rest/push push activation direct_publish_client_id" time="0.460" classname="direct_publish_client_id">
    </testcase>
    <testcase name="rest/push push activation subscribe_device" time="0.809" classname="subscribe_device">
    </testcase>
    <testcase name="rest/push push activation unsubscribe_device" time="1.028" classname="unsubscribe_device">
    </testcase>
    <testcase name="rest/push push activation direct_publish_device_id" time="0.474" classname="direct_publish_device_id">
    </testcase>
    <testcase name="rest/push push activation push_channel_subscription_device_id" time="0.785" classname="push_channel_subscription_device_id">
    </testcase>
    <testcase name="rest/push push activation push_channel_subscription_client_id" time="1.483" classname="push_channel_subscription_client_id">
    </testcase>
    <testcase name="rest/push push activation failed_getting_device_details" time="0.001" classname="failed_getting_device_details">
    </testcase>
    <testcase name="rest/push push activation failed_registration" time="0.022" classname="failed_registration">
    </testcase>
  </testsuite>
  <testsuite name="rest/request" timestamp="2025-06-19T16:47:09" tests="16" file="/home/runner/work/ably-js/ably-js/test/rest/request.test.js" time="1.459" failures="4">
    <testcase name="rest/request request_version with binary protocol" time="0.001" classname="request_version with binary protocol">
    </testcase>
    <testcase name="rest/request request_version with text protocol" time="0.000" classname="request_version with text protocol">
    </testcase>
    <testcase name="rest/request request_time with binary protocol" time="0.009" classname="request_time with binary protocol">
    </testcase>
    <testcase name="rest/request request_time with text protocol" time="0.010" classname="request_time with text protocol">
    </testcase>
    <testcase name="rest/request request_404 with binary protocol" time="0.561" classname="request_404 with binary protocol">
    </testcase>
    <testcase name="rest/request request_404 with text protocol" time="0.528" classname="request_404 with text protocol">
    </testcase>
    <testcase name="rest/request request_network_error" time="0.000" classname="request_network_error">
      <failure message="The `endpoint` option cannot be used in conjunction with the `environment`, `restHost`, or `realtimeHost` options." type="Error"><![CDATA[Error: The `endpoint` option cannot be used in conjunction with the `environment`, `restHost`, or `realtimeHost` options.
    at checkIfClientOptionsAreValid (src/common/lib/util/defaults.ts:245:11)
    at Object.normaliseOptions (src/common/lib/util/defaults.ts:270:3)
    at new BaseClient (src/common/lib/client/baseclient.ts:69:52)
    at new BaseRest (src/common/lib/client/baserest.ts:22:5)
    at new _DefaultRest (src/common/lib/client/defaultrest.ts:27:5)
    at Object.ablyRest (test/common/modules/client_module.js:30:12)
    at SharedHelper.AblyRest (test/common/modules/shared_helper.js:451:27)
    at Context.<anonymous> (test/rest/request.test.js:95:21)
    at processImmediate (node:internal/timers:466:21)]]></failure>
    </testcase>
    <testcase name="rest/request request_post_get_messages with binary protocol" time="0.152" classname="request_post_get_messages with binary protocol">
    </testcase>
    <testcase name="rest/request request_post_get_messages with text protocol" time="0.136" classname="request_post_get_messages with text protocol">
    </testcase>
    <testcase name="rest/request request_batch_api_success with binary protocol" time="0.021" classname="request_batch_api_success with binary protocol">
    </testcase>
    <testcase name="rest/request request_batch_api_success with text protocol" time="0.032" classname="request_batch_api_success with text protocol">
    </testcase>
    <testcase name="rest/request checkput" time="0.001" classname="checkput">
      <failure message="The `endpoint` option cannot be used in conjunction with the `environment`, `restHost`, or `realtimeHost` options." type="Error"><![CDATA[Error: The `endpoint` option cannot be used in conjunction with the `environment`, `restHost`, or `realtimeHost` options.
    at checkIfClientOptionsAreValid (src/common/lib/util/defaults.ts:245:11)
    at Object.normaliseOptions (src/common/lib/util/defaults.ts:270:3)
    at new BaseClient (src/common/lib/client/baseclient.ts:69:52)
    at new BaseRest (src/common/lib/client/baserest.ts:22:5)
    at new _DefaultRest (src/common/lib/client/defaultrest.ts:27:5)
    at Object.ablyRest (test/common/modules/client_module.js:30:12)
    at SharedHelper.AblyRest (test/common/modules/shared_helper.js:451:27)
    at Context.<anonymous> (test/rest/request.test.js:223:31)
    at processImmediate (node:internal/timers:466:21)]]></failure>
    </testcase>
    <testcase name="rest/request checkpatch" time="0.000" classname="checkpatch">
      <failure message="The `endpoint` option cannot be used in conjunction with the `environment`, `restHost`, or `realtimeHost` options." type="Error"><![CDATA[Error: The `endpoint` option cannot be used in conjunction with the `environment`, `restHost`, or `realtimeHost` options.
    at checkIfClientOptionsAreValid (src/common/lib/util/defaults.ts:245:11)
    at Object.normaliseOptions (src/common/lib/util/defaults.ts:270:3)
    at new BaseClient (src/common/lib/client/baseclient.ts:69:52)
    at new BaseRest (src/common/lib/client/baserest.ts:22:5)
    at new _DefaultRest (src/common/lib/client/defaultrest.ts:27:5)
    at Object.ablyRest (test/common/modules/client_module.js:30:12)
    at SharedHelper.AblyRest (test/common/modules/shared_helper.js:451:27)
    at Context.<anonymous> (test/rest/request.test.js:223:31)
    at processImmediate (node:internal/timers:466:21)]]></failure>
    </testcase>
    <testcase name="rest/request checkdelete" time="0.000" classname="checkdelete">
      <failure message="The `endpoint` option cannot be used in conjunction with the `environment`, `restHost`, or `realtimeHost` options." type="Error"><![CDATA[Error: The `endpoint` option cannot be used in conjunction with the `environment`, `restHost`, or `realtimeHost` options.
    at checkIfClientOptionsAreValid (src/common/lib/util/defaults.ts:245:11)
    at Object.normaliseOptions (src/common/lib/util/defaults.ts:270:3)
    at new BaseClient (src/common/lib/client/baseclient.ts:69:52)
    at new BaseRest (src/common/lib/client/baserest.ts:22:5)
    at new _DefaultRest (src/common/lib/client/defaultrest.ts:27:5)
    at Object.ablyRest (test/common/modules/client_module.js:30:12)
    at SharedHelper.AblyRest (test/common/modules/shared_helper.js:451:27)
    at Context.<anonymous> (test/rest/request.test.js:223:31)
    at processImmediate (node:internal/timers:466:21)]]></failure>
    </testcase>
  </testsuite>
  <testsuite name="rest/stats" timestamp="2025-06-19T16:47:10" tests="11" file="/home/runner/work/ably-js/ably-js/test/rest/stats.test.js" time="21.403" failures="0">
    <testcase name="rest/stats contains expected fields" time="10.092" classname="contains expected fields">
    </testcase>
    <testcase name="rest/stats appstats_minute0" time="0.028" classname="appstats_minute0">
    </testcase>
    <testcase name="rest/stats appstats_minute1" time="0.017" classname="appstats_minute1">
    </testcase>
    <testcase name="rest/stats appstats_hour0" time="0.026" classname="appstats_hour0">
    </testcase>
    <testcase name="rest/stats appstats_limit_backwards" time="0.017" classname="appstats_limit_backwards">
    </testcase>
    <testcase name="rest/stats appstats_limit_forwards" time="0.028" classname="appstats_limit_forwards">
    </testcase>
    <testcase name="rest/stats appstats_pagination_backwards" time="0.064" classname="appstats_pagination_backwards">
    </testcase>
    <testcase name="rest/stats appstats_pagination_forwards" time="0.071" classname="appstats_pagination_forwards">
    </testcase>
    <testcase name="rest/stats appstats_pagination_omitted" time="0.061" classname="appstats_pagination_omitted">
    </testcase>
  </testsuite>
  <testsuite name="rest/status" timestamp="2025-06-19T16:47:32" tests="2" file="/home/runner/work/ably-js/ably-js/test/rest/status.test.js" time="0.113" failures="0">
    <testcase name="rest/status status0 with binary protocol" time="0.095" classname="status0 with binary protocol">
    </testcase>
    <testcase name="rest/status status0 with text protocol" time="0.017" classname="status0 with text protocol">
    </testcase>
  </testsuite>
  <testsuite name="rest/time" timestamp="2025-06-19T16:47:32" tests="1" file="/home/runner/work/ably-js/ably-js/test/rest/time.test.js" time="0.007" failures="0">
    <testcase name="rest/time time0" time="0.007" classname="time0">
    </testcase>
  </testsuite>
  <testsuite name="PresenceMap" timestamp="2025-06-19T16:47:32" tests="0" file="/home/runner/work/ably-js/ably-js/test/unit/presencemap.test.js" time="0.000" failures="0">
  </testsuite>
  <testsuite name="remove()" timestamp="2025-06-19T16:47:32" tests="3" file="/home/runner/work/ably-js/ably-js/test/unit/presencemap.test.js" time="6.097" failures="0">
    <testcase name="PresenceMap remove() should return false when no matching member present" time="0.000" classname="should return false when no matching member present">
    </testcase>
    <testcase name="PresenceMap remove() should return true when removing an (older) matching member" time="0.000" classname="should return true when removing an (older) matching member">
    </testcase>
    <testcase name="PresenceMap remove() should return false when trying to remove a newer matching member" time="0.001" classname="should return false when trying to remove a newer matching member">
    </testcase>
  </testsuite>
</testsuites>