<testsuites tests="1488" failures="0">
    <testsuite name="AblyTests" tests="1103" failures="0" skipped="0" time="1631.2498315572739">
        <properties>
          <property name="Configuration" value="Test Scheme Action"/>
        </properties>
        <testcase classname="ARTDefaultTests" name="testVersions()" time="0.0012880563735961914">
        </testcase>
        <testcase classname="AttachRetryStateTests" name="test_addRetryAttempt()" time="0.0014889240264892578">
        </testcase>
        <testcase classname="AttachRetryStateTests" name="test_transitionToAttachingOrSuspendedStateDoesNotResetRetrySequence()" time="0.027265071868896484">
        </testcase>
        <testcase classname="AttachRetryStateTests" name="test_transitionToNonAttachingOrSuspendedStateResetsRetrySequence()" time="0.0004220008850097656">
        </testcase>
        <testcase classname="AuthTests" name="test__001__should_not_force_token_auth_when_clientId_is_set()" time="2.034924030303955">
        </testcase>
        <testcase classname="AuthTests" name="test__002__should_accept_authURL_response_with_timestamp_argument_as_string()" time="0.11597895622253418">
        </testcase>
        <testcase classname="AuthTests" name="test__003__Basic__should_work_over_HTTPS_only()" time="0.011316061019897461">
        </testcase>
        <testcase classname="AuthTests" name="test__004__Basic__should_send_the_API_key_in_the_Authorization_header()" time="0.04845297336578369">
        </testcase>
        <testcase classname="AuthTests" name="test__005__Basic__should_be_default_when_an_API_key_is_set()" time="0.0009819269180297852">
        </testcase>
        <testcase classname="AuthTests" name="test__006__Token__TTL_should_default_to_be_omitted()" time="0.0015600919723510742">
        </testcase>
        <testcase classname="AuthTests" name="test__007__Token__should_URL_query_be_correctly_encoded()" time="0.007469892501831055">
        </testcase>
        <testcase classname="AuthTests" name="test__008__Token__should_omit_capability_field_if_it_is_not_specified()" time="0.05093801021575928">
        </testcase>
        <testcase classname="AuthTests" name="test__009__Token__should_add_capability_field_if_the_user_specifies_it()" time="0.06827306747436523">
        </testcase>
        <testcase classname="AuthTests" name="test__010__Token__token_auth__should_work_over_HTTP()" time="0.11567997932434082">
        </testcase>
        <testcase classname="AuthTests" name="test__011__Token__token_auth__should_work_over_HTTPS()" time="0.08951103687286377">
        </testcase>
        <testcase classname="AuthTests" name="test__012__Token__token_auth__for_REST_requests__should_send_the_token_in_the_Authorization_header()" time="0.0838090181350708">
        </testcase>
        <testcase classname="AuthTests" name="test__013__Token__token_auth__for_Realtime_connections__should_send_the_token_in_the_querystring_as_a_param_named_accessToken()" time="0.051478028297424316">
        </testcase>
        <testcase classname="AuthTests" name="test__014__Token__authentication_method__should_be_default_auth_method_when_options__useTokenAuth_is_set()" time="0.0011510848999023438">
        </testcase>
        <testcase classname="AuthTests" name="test__015__Token__authentication_method__should_be_default_auth_method_when_options__authUrl_is_set()" time="0.0014740228652954102">
        </testcase>
        <testcase classname="AuthTests" name="test__016__Token__authentication_method__should_be_default_auth_method_when_options__authCallback_is_set()" time="0.0009540319442749023">
        </testcase>
        <testcase classname="AuthTests" name="test__017__Token__authentication_method__should_be_default_auth_method_when_options__tokenDetails_is_set()" time="0.0006840229034423828">
        </testcase>
        <testcase classname="AuthTests" name="test__018__Token__authentication_method__should_be_default_auth_method_when_options__token_is_set()" time="0.0006040334701538086">
        </testcase>
        <testcase classname="AuthTests" name="test__019__Token__authentication_method__should_be_default_auth_method_when_options__key_is_set()" time="0.002297043800354004">
        </testcase>
        <testcase classname="AuthTests" name="test__020__Token__authentication_method__should_indicate_an_error_and_not_retry_the_request_when_the_server_responds_with_a_token_error_and_there_is_no_way_to_renew_the_token()" time="0.06124603748321533">
        </testcase>
        <testcase classname="AuthTests" name="test__021__Token__authentication_method__should_transition_the_connection_to_the_FAILED_state_when_the_server_responds_with_a_token_error_and_there_is_no_way_to_renew_the_token()" time="2.3505159616470337">
        </testcase>
        <testcase classname="AuthTests" name="test__022__Token__authentication_method__on_token_error__reissues_token_and_retries_REST_requests()" time="0.12830209732055664">
        </testcase>
        <testcase classname="AuthTests" name="test__023__Token__authentication_method__in_REST__if_the_token_creation_failed_or_the_subsequent_request_with_the_new_token_failed_due_to_a_token_error__then_the_request_should_result_in_an_error()" time="0.004191994667053223">
        </testcase>
        <testcase classname="AuthTests" name="test__024__Token__authentication_method__in_Realtime__if_the_token_creation_failed_then_the_connection_should_move_to_the_DISCONNECTED_state_and_reports_the_error()" time="0.007285952568054199">
        </testcase>
        <testcase classname="AuthTests" name="test__025__Token__authentication_method__in_Realtime__if_the_connection_fails_due_to_a_terminal_token_error__then_the_connection_should_move_to_the_FAILED_state_and_reports_the_error()" time="0.6984339952468872">
        </testcase>
        <testcase classname="AuthTests" name="test__026__Token__authentication_method__if_a_request_by_a_realtime_client_to_an_authUrl_results_in_an_HTTP_403_the_client_library_should_transition_to_the_FAILED_state()" time="1.5799729824066162">
        </testcase>
        <testcase classname="AuthTests" name="test__027__Token__authentication_method__if_an_authCallback_results_in_an_HTTP_403_the_client_library_should_transition_to_the_FAILED_state()" time="0.030621051788330078">
        </testcase>
        <testcase classname="AuthTests" name="test__028__Token__authentication_method__local_token_validity_check__should_be_done_if_queryTime_is_true_and_local_time_is_in_sync_with_server()" time="6.71734893321991">
        </testcase>
        <testcase classname="AuthTests" name="test__029__Token__authentication_method__local_token_validity_check__should_NOT_be_done_if_queryTime_is_false_and_local_time_is_NOT_in_sync_with_server()" time="5.570834040641785">
        </testcase>
        <testcase classname="AuthTests" name="test__030__Token__options__should_stop_client_when_useTokenAuth_and_no_key_occurs()" time="0.0013210773468017578">
        </testcase>
        <testcase classname="AuthTests" name="test__031__Token__options__should_stop_client_when_authCallback_and_authUrl_occurs()" time="0.22489702701568604">
        </testcase>
        <testcase classname="AuthTests" name="test__032__Token__options__if_an_attempt_by_the_realtime_client_library_to_authenticate_is_made_using_the_authUrl_or_authCallback__the_request_to_authUrl_fails__if_the_connection_is_CONNECTING__then_the_connection_attempt_should_be_treated_as_unsuccessful()" time="0.3169059753417969">
        </testcase>
        <testcase classname="AuthTests" name="test__033__Token__options__if_an_attempt_by_the_realtime_client_library_to_authenticate_is_made_using_the_authUrl_or_authCallback__the_request_to_authUrl_fails__if_the_connection_is_CONNECTED__then_the_connection_should_remain_CONNECTED()" time="1.4343290328979492">
        </testcase>
        <testcase classname="AuthTests" name="test__034__Token__options__if_an_attempt_by_the_realtime_client_library_to_authenticate_is_made_using_the_authUrl_or_authCallback__the_request_to_authCallback_fails__if_the_connection_is_CONNECTING__then_the_connection_attempt_should_be_treated_as_unsuccessful()" time="1.2163339853286743">
        </testcase>
        <testcase classname="AuthTests" name="test__035__Token__options__if_an_attempt_by_the_realtime_client_library_to_authenticate_is_made_using_the_authUrl_or_authCallback__the_request_to_authCallback_fails__if_the_connection_is_CONNECTED__then_the_connection_should_remain_CONNECTED()" time="4.594356060028076">
        </testcase>
        <testcase classname="AuthTests" name="test__036__Token__options__if_an_attempt_by_the_realtime_client_library_to_authenticate_is_made_using_the_authUrl_or_authCallback__the_provided_token_is_in_an_invalid_format__if_the_connection_is_CONNECTING__then_the_connection_attempt_should_be_treated_as_unsuccessful()" time="1.669888973236084">
        </testcase>
        <testcase classname="AuthTests" name="test__037__Token__options__if_an_attempt_by_the_realtime_client_library_to_authenticate_is_made_using_the_authUrl_or_authCallback__the_provided_token_is_in_an_invalid_format__if_the_connection_is_CONNECTED__then_the_connection_should_remain_CONNECTED()" time="1.4948729276657104">
        </testcase>
        <testcase classname="AuthTests" name="test__038__Token__options__if_an_attempt_by_the_realtime_client_library_to_authenticate_is_made_using_the_authUrl_or_authCallback__the_attempt_times_out_after_realtimeRequestTimeout__if_the_connection_is_CONNECTING__then_the_connection_attempt_should_be_treated_as_unsuccessful()" time="1.1123930215835571">
        </testcase>
        <testcase classname="AuthTests" name="test__039__Token__options__if_an_attempt_by_the_realtime_client_library_to_authenticate_is_made_using_the_authUrl_or_authCallback__the_attempt_times_out_after_realtimeRequestTimeout__if_the_connection_is_CONNECTED__then_the_connection_should_remain_CONNECTED()" time="2.1384130716323853">
        </testcase>
        <testcase classname="AuthTests" name="test__040__Token__token_auth_and_clientId__should_permit_to_be_unauthenticated()" time="0.5949150323867798">
        </testcase>
        <testcase classname="AuthTests" name="test__041__Token__token_auth_and_clientId__should_check_clientId_consistency__on_rest()" time="1.2317930459976196">
        </testcase>
        <testcase classname="AuthTests" name="test__042__Token__token_auth_and_clientId__should_check_clientId_consistency__on_realtime()" time="0.24370098114013672">
        </testcase>
        <testcase classname="AuthTests" name="test__043__Token__token_auth_and_clientId__should_check_clientId_consistency__with_wildcard()" time="0.029476046562194824">
        </testcase>
        <testcase classname="AuthTests" name="test__044__Token__token_auth_and_clientId__Incompatible_client__with_Realtime__it_should_change_the_connection_state_to_FAILED_and_emit_an_error()" time="2.5997380018234253">
        </testcase>
        <testcase classname="AuthTests" name="test__045__Token__token_auth_and_clientId__Incompatible_client__with_Rest__it_should_result_in_an_appropriate_error_response()" time="0.3363199234008789">
        </testcase>
        <testcase classname="AuthTests" name="test__046__Token__clientId_and_authenticated_clients__should_not_pass_clientId_with_published_message()" time="1.325173020362854">
        </testcase>
        <testcase classname="AuthTests" name="test__047__Token__clientId_and_authenticated_clients__should_obtain_a_token_if_clientId_is_assigned()" time="0.14244496822357178">
        </testcase>
        <testcase classname="AuthTests" name="test__048__Token__clientId_and_authenticated_clients__should_convenience_clientId_return_a_string()" time="0.013856053352355957">
        </testcase>
        <testcase classname="AuthTests" name="test__049__Token__clientId_and_authenticated_clients__ClientOptions_clientId_takes_precendence_when_a_clientId_value_is_provided_in_both_ClientOptions_clientId_and_ClientOptions_defaultTokenParams()" time="1.4953370094299316">
        </testcase>
        <testcase classname="AuthTests" name="test__050__Token__clientId_and_authenticated_clients__should_clientId_be_null_or_string()" time="0.48860108852386475">
        </testcase>
        <testcase classname="AuthTests" name="test__051__Token__clientId_and_authenticated_clients__Auth_clientId_attribute_is_null__identity_should_be_anonymous_for_all_operations()" time="0.047582030296325684">
        </testcase>
        <testcase classname="AuthTests" name="test__052__Token__clientId_and_authenticated_clients__Auth_clientId_attribute_is_null__identity_may_change_and_become_identified()" time="0.39688801765441895">
        </testcase>
        <testcase classname="AuthTests" name="test__053__Token__clientId_and_authenticated_clients__auth_clientId_not_null__when_clientId_attribute_is_assigned_on_client_options()" time="0.0012890100479125977">
        </testcase>
        <testcase classname="AuthTests" name="test__054__Token__clientId_and_authenticated_clients__auth_clientId_not_null__when_tokenRequest_or_tokenDetails_has_clientId_not_null_or_wildcard_string()" time="0.04903900623321533">
        </testcase>
        <testcase classname="AuthTests" name="test__055__Token__clientId_and_authenticated_clients__auth_clientId_not_null__should_CONNECTED_ProtocolMessages_contain_a_clientId()" time="0.8966859579086304">
        </testcase>
        <testcase classname="AuthTests" name="test__056__Token__clientId_and_authenticated_clients__auth_clientId_not_null__client_does_not_have_an_identity_when_a_wildcard_string_____is_present()" time="0.1368640661239624">
        </testcase>
        <testcase classname="AuthTests" name="test__057__requestToken__implicitly_creates_a_TokenRequest_and_requests_a_token()" time="0.8165789842605591">
        </testcase>
        <testcase classname="AuthTests" name="test__058__requestToken__ensure_the_message_published_does_not_have_a_clientId()" time="0.3532940149307251">
        </testcase>
        <testcase classname="AuthTests" name="test__059__requestToken__ensure_that_the_message_is_rejected()" time="0.5721110105514526">
        </testcase>
        <testcase classname="AuthTests" name="test__060__requestToken__ensure_the_message_published_with_a_wildcard_____does_not_have_a_clientId()" time="0.42881298065185547">
        </testcase>
        <testcase classname="AuthTests" name="test__061__requestToken__ensure_the_message_published_with_a_wildcard_____has_the_provided_clientId()" time="0.29152798652648926">
        </testcase>
        <testcase classname="AuthTests" name="test__062__requestToken__arguments__should_not_merge_with_the_configured_params_and_options_but_instead_replace_all_corresponding_values__even_when__null_()" time="0.8828229904174805">
        </testcase>
        <testcase classname="AuthTests" name="test__063__requestToken__arguments__should_use_configured_defaults_if_the_object_arguments_are_omitted()" time="0.6658139228820801">
        </testcase>
        <testcase classname="AuthTests" name="test__064__requestToken__authUrl__query_will_provide_a_token_string()" time="0.45020592212677">
        </testcase>
        <testcase classname="AuthTests" name="test__065__requestToken__authUrl__query_will_provide_a_TokenDetails()" time="0.8016449213027954">
        </testcase>
        <testcase classname="AuthTests" name="test__066__requestToken__authUrl__query_will_provide_a_TokenRequest()" time="0.2914379835128784">
        </testcase>
        <testcase classname="AuthTests" name="test__067__requestToken__authUrl__TokenParams_should_take_precedence_over_any_configured_authParams_when_a_name_conflict_occurs()" time="3.9095369577407837">
        </testcase>
        <testcase classname="AuthTests" name="test__068__requestToken__authUrl__should_override_previously_configured_parameters()" time="0.003594040870666504">
        </testcase>
        <testcase classname="AuthTests" name="test__069__requestToken__authUrl__parameters__should_be_added_to_the_URL_when_auth_method_is_GET()" time="0.0059049129486083984">
        </testcase>
        <testcase classname="AuthTests" name="test__070__requestToken__authUrl__parameters__should_added_on_the_body_request_when_auth_method_is_POST()" time="0.001392960548400879">
        </testcase>
        <testcase classname="AuthTests" name="test__071__requestToken__should_support_all_TokenParams__using_defaults()" time="3.1492949724197388">
        </testcase>
        <testcase classname="AuthTests" name="test__072__requestToken__should_support_all_TokenParams__overriding_defaults()" time="2.1833940744400024">
        </testcase>
        <testcase classname="AuthTests" name="test__073__requestToken__When_authCallback_option_is_set__it_will_invoke_the_callback__with_a_token_string()" time="0.0030679702758789062">
        </testcase>
        <testcase classname="AuthTests" name="test__074__requestToken__When_authCallback_option_is_set__it_will_invoke_the_callback__with_a_TokenDetails()" time="0.01046597957611084">
        </testcase>
        <testcase classname="AuthTests" name="test__075__requestToken__When_authCallback_option_is_set__it_will_invoke_the_callback__with_a_TokenRequest()" time="5.485206961631775">
        </testcase>
        <testcase classname="AuthTests" name="test__076__createTokenRequest__should_not_merge_with_the_configured_params_and_options_but_instead_replace_all_corresponding_values__even_when__null_()" time="0.3302950859069824">
        </testcase>
        <testcase classname="AuthTests" name="test__077__createTokenRequest__should_override_defaults_if_AuthOptions_provided()" time="0.07252705097198486">
        </testcase>
        <testcase classname="AuthTests" name="test__078__createTokenRequest__should_use_defaults_if_no_AuthOptions_is_provided()" time="0.49860501289367676">
        </testcase>
        <testcase classname="AuthTests" name="test__079__createTokenRequest__should_replace_defaults_if__nil__option_s_field_passed()" time="0.49054598808288574">
        </testcase>
        <testcase classname="AuthTests" name="test__080__createTokenRequest__should_use_configured_defaults_if_the_object_arguments_are_omitted()" time="0.14127600193023682">
        </testcase>
        <testcase classname="AuthTests" name="test__081__createTokenRequest__should_create_and_sign_a_TokenRequest()" time="0.02031099796295166">
        </testcase>
        <testcase classname="AuthTests" name="test__082__createTokenRequest__should_support_AuthOptions()" time="0.005663037300109863">
        </testcase>
        <testcase classname="AuthTests" name="test__083__createTokenRequest__should_generate_a_unique_16_plus_character_nonce_if_none_is_provided()" time="0.0028630495071411133">
        </testcase>
        <testcase classname="AuthTests" name="test__084__createTokenRequest__should_provide_capability_has_json_text()" time="0.0012360811233520508">
        </testcase>
        <testcase classname="AuthTests" name="test__085__createTokenRequest__should_generate_a_valid_HMAC()" time="0.0019539594650268555">
        </testcase>
        <testcase classname="AuthTests" name="test__086__createTokenRequest__should_respect_all_requirements()" time="0.05280900001525879">
        </testcase>
        <testcase classname="AuthTests" name="test__087__createTokenRequest__should_generate_a_timestamp__from_current_time_if_not_provided()" time="0.7811490297317505">
        </testcase>
        <testcase classname="AuthTests" name="test__088__createTokenRequest__should_generate_a_timestamp__will_retrieve_the_server_time_if_queryTime_is_true()" time="0.03510701656341553">
        </testcase>
        <testcase classname="AuthTests" name="test__089__createTokenRequest__TTL__should_be_optional()" time="0.004097938537597656">
        </testcase>
        <testcase classname="AuthTests" name="test__090__createTokenRequest__TTL__should_be_specified_in_milliseconds()" time="1.4112910032272339">
        </testcase>
        <testcase classname="AuthTests" name="test__091__createTokenRequest__TTL__should_be_valid_to_request_a_token_for_24_hours()" time="0.16170406341552734">
        </testcase>
        <testcase classname="AuthTests" name="test__092__authorize__should_always_create_a_token()" time="0.7894469499588013">
        </testcase>
        <testcase classname="AuthTests" name="test__093__authorize__should_create_a_new_token_if_one_already_exist_and_ensure_Token_Auth_is_used_for_all_future_requests()" time="0.6897270679473877">
        </testcase>
        <testcase classname="AuthTests" name="test__094__authorize__should_create_a_token_immediately_and_ensures_Token_Auth_is_used_for_all_future_requests()" time="0.06690800189971924">
        </testcase>
        <testcase classname="AuthTests" name="test__095__authorize__should_supports_all_TokenParams_and_AuthOptions()" time="0.17625296115875244">
        </testcase>
        <testcase classname="AuthTests" name="test__096__authorize__should_use_the_requestToken_implementation()" time="0.04749107360839844">
        </testcase>
        <testcase classname="AuthTests" name="test__097__authorize__should_return_TokenDetails_with_valid_token_metadata()" time="0.3168569803237915">
        </testcase>
        <testcase classname="AuthTests" name="test__098__authorize__should_use_the_configured_Auth_clientId__if_not_null__by_default()" time="0.5670950412750244">
        </testcase>
        <testcase classname="AuthTests" name="test__099__authorize__on_subsequent_authorisations__should_store_the_AuthOptions_with_authUrl()" time="0.6542420387268066">
        </testcase>
        <testcase classname="AuthTests" name="test__100__authorize__on_subsequent_authorisations__should_store_the_AuthOptions_with_authCallback()" time="0.0013660192489624023">
        </testcase>
        <testcase classname="AuthTests" name="test__101__authorize__on_subsequent_authorisations__should_not_store_queryTime()" time="0.26576101779937744">
        </testcase>
        <testcase classname="AuthTests" name="test__102__authorize__on_subsequent_authorisations__should_store_the_TokenParams()" time="2.963197946548462">
        </testcase>
        <testcase classname="AuthTests" name="test__103__authorize__on_subsequent_authorisations__should_use_configured_defaults_if_the_object_arguments_are_omitted()" time="0.1286020278930664">
        </testcase>
        <testcase classname="AuthTests" name="test__104__authorize__should_adhere_to_all_requirements_relating_to__TokenParams()" time="0.05811107158660889">
        </testcase>
        <testcase classname="AuthTests" name="test__105__authorize__should_adhere_to_all_requirements_relating_to__authCallback()" time="0.2710299491882324">
        </testcase>
        <testcase classname="AuthTests" name="test__106__authorize__should_adhere_to_all_requirements_relating_to__authUrl()" time="0.15129399299621582">
        </testcase>
        <testcase classname="AuthTests" name="test__107__authorize__should_adhere_to_all_requirements_relating_to__authUrl_with_json()" time="0.9139629602432251">
        </testcase>
        <testcase classname="AuthTests" name="test__108__authorize__should_adhere_to_all_requirements_relating_to__authUrl_returning_TokenRequest_decodes_TTL_as_expected()" time="0.3829089403152466">
        </testcase>
        <testcase classname="AuthTests" name="test__109__authorize__should_adhere_to_all_requirements_relating_to__authUrl_with_plain_text()" time="0.6634880304336548">
        </testcase>
        <testcase classname="AuthTests" name="test__110__authorize__when_TokenParams_and_AuthOptions_are_provided__should_supersede_configured_AuthOptions__using_key__even_if_arguments_objects_are_empty()" time="1.2250779867172241">
        </testcase>
        <testcase classname="AuthTests" name="test__111__authorize__when_TokenParams_and_AuthOptions_are_provided__should_supersede_configured_AuthOptions__using_authUrl__even_if_arguments_objects_are_empty()" time="0.7657289505004883">
        </testcase>
        <testcase classname="AuthTests" name="test__112__authorize__when_TokenParams_and_AuthOptions_are_provided__should_supersede_configured_AuthOptions__using_authCallback__even_if_arguments_objects_are_empty()" time="0.010689020156860352">
        </testcase>
        <testcase classname="AuthTests" name="test__113__authorize__when_TokenParams_and_AuthOptions_are_provided__should_supersede_configured_params_and_options_even_if_arguments_objects_are_empty()" time="0.23406708240509033">
        </testcase>
        <testcase classname="AuthTests" name="test__114__authorize__when_TokenParams_and_AuthOptions_are_provided__example__if_a_client_is_initialised_with_TokenParams_ttl_configured_with_a_custom_value__and_a_TokenParams_object_is_passed_in_as_an_argument_to__authorize_with_a_null_value_for_ttl__then_the_ttl_used_for_every_subsequent_authorization_will_be_null()" time="0.06690800189971924">
        </testcase>
        <testcase classname="AuthTests" name="test__115__authorize__server_time_offset__should_obtain_server_time_once_and_persist_the_offset_from_the_local_clock()" time="7.760883092880249">
            <failure message="failed - expected to be close to &lt;2026-09-11 16:04:59.0050&gt; (within 0.9), got &lt;2026-09-11 16:04:57.2340&gt;
 (/Users/runner/work/ably-cocoa/ably-cocoa/Test/AblyTests/Tests/AuthTests.swift#EndingLineNumber=3472&amp;StartingLineNumber=3472)">
            </failure>
        </testcase>
        <testcase classname="AuthTests" name="test__115__authorize__server_time_offset__should_obtain_server_time_once_and_persist_the_offset_from_the_local_clock()" time="0.2072240114212036">
        </testcase>
        <testcase classname="AuthTests" name="test__116__authorize__server_time_offset__should_be_consistent_the_timestamp_request_with_the_server_time()" time="2.8298230171203613">
        </testcase>
        <testcase classname="AuthTests" name="test__117__authorize__server_time_offset__should_be_possible_by_lib_Client_to_discard_the_cached_local_clock_offset()" time="4.403018951416016">
        </testcase>
        <testcase classname="AuthTests" name="test__118__authorize__server_time_offset__should_use_the_local_clock_offset_to_calculate_the_server_time()" time="0.0018030405044555664">
        </testcase>
        <testcase classname="AuthTests" name="test__119__authorize__server_time_offset__should_request_server_time_when_queryTime_is_true_even_if_the_time_offset_is_assigned()" time="0.24307596683502197">
        </testcase>
        <testcase classname="AuthTests" name="test__120__authorize__server_time_offset__should_discard_the_time_offset_in_situations_in_which_it_may_have_been_invalidated()" time="2.791409969329834">
        </testcase>
        <testcase classname="AuthTests" name="test__121__authorize__two_consecutive_authorizations__using_REST__should_call_each_authorize_callback()" time="0.05014002323150635">
        </testcase>
        <testcase classname="AuthTests" name="test__122__authorize__two_consecutive_authorizations__using_Realtime_and_connection_is_CONNECTING__should_call_each_Realtime_authorize_callback()" time="0.2640479803085327">
        </testcase>
        <testcase classname="AuthTests" name="test__123__authorize__two_consecutive_authorizations__using_Realtime_and_connection_is_CONNECTED__should_call_each_Realtime_authorize_callback()" time="0.11409389972686768">
        </testcase>
        <testcase classname="AuthTests" name="test__124__TokenParams__timestamp__if_explicitly_set__should_be_returned_by_the_getter()" time="0.0008269548416137695">
        </testcase>
        <testcase classname="AuthTests" name="test__125__TokenParams__timestamp__if_explicitly_set__the_value_should_stick()" time="0.26661694049835205">
        </testcase>
        <testcase classname="AuthTests" name="test__126__TokenParams__timestamp__object_has_no_timestamp_value_unless_explicitly_set()" time="0.0017889738082885742">
        </testcase>
        <testcase classname="AuthTests" name="test__127__Reauth__should_use_authorize__force__true___to_reauth_with_a_token_with_a_different_set_of_capabilities()" time="0.35935091972351074">
        </testcase>
        <testcase classname="AuthTests" name="test__128__Reauth__for_a_token_change_that_fails_due_to_an_incompatible_token__which_should_result_in_the_connection_entering_the_FAILED_state()" time="0.16430091857910156">
        </testcase>
        <testcase classname="AuthTests" name="test__129__TokenParams__timestamp_should_not_be_a_member_of_any_default_token_params()" time="0.3107980489730835">
        </testcase>
        <testcase classname="AuthTests" name="test__130__TokenRequest__fromJson__rejects_invalid_JSON()" time="0.00964200496673584">
        </testcase>
        <testcase classname="AuthTests" name="test__131__TokenRequest__fromJson__rejects_non_object_JSON()" time="0.0032900571823120117">
        </testcase>
        <testcase classname="AuthTests" name="test__132__TokenRequest__fromJson__with_TTL__accepts_a_string__which_should_be_interpreted_as_JSON()" time="0.002444028854370117">
        </testcase>
        <testcase classname="AuthTests" name="test__133__TokenRequest__fromJson__with_TTL__accepts_a_NSDictionary()" time="0.0015250444412231445">
        </testcase>
        <testcase classname="AuthTests" name="test__134__TokenRequest__fromJson__without_TTL__accepts_a_string__which_should_be_interpreted_as_JSON()" time="0.001338958740234375">
        </testcase>
        <testcase classname="AuthTests" name="test__135__TokenRequest__fromJson__without_TTL__accepts_a_NSDictionary()" time="0.0015020370483398438">
        </testcase>
        <testcase classname="AuthTests" name="test__136__TokenDetails__fromJson__accepts_a_string__which_should_be_interpreted_as_JSON()" time="0.0005990266799926758">
        </testcase>
        <testcase classname="AuthTests" name="test__137__TokenDetails__fromJson__accepts_a_NSDictionary()" time="0.0007250308990478516">
        </testcase>
        <testcase classname="AuthTests" name="test__138__TokenDetails__fromJson__rejects_invalid_JSON()" time="0.0006079673767089844">
        </testcase>
        <testcase classname="AuthTests" name="test__139__TokenDetails__fromJson__rejects_non_object_JSON()" time="0.0004360675811767578">
        </testcase>
        <testcase classname="AuthTests" name="test__140__JWT_and_realtime__client_initialized_with_a_JWT_token_in_ClientOptions__with_valid_credentials__pulls_stats_successfully()" time="0.09279704093933105">
        </testcase>
        <testcase classname="AuthTests" name="test__141__JWT_and_realtime__client_initialized_with_a_JWT_token_in_ClientOptions__with_invalid_credentials__fails_to_connect_with_reason__invalid_signature_()" time="0.046424031257629395">
        </testcase>
        <testcase classname="AuthTests" name="test__142__JWT_and_realtime__when_using_authUrl__with_valid_credentials__fetches_a_channels_and_posts_a_message()" time="0.5141290426254272">
        </testcase>
        <testcase classname="AuthTests" name="test__143__JWT_and_realtime__when_using_authUrl__with_wrong_credentials__fails_to_connect_with_reason__invalid_signature_()" time="7.123404026031494">
        </testcase>
        <testcase classname="AuthTests" name="test__144__JWT_and_realtime__when_using_authUrl__when_token_expires__receives_a_40142_error_from_the_server()" time="4.878001093864441">
        </testcase>
        <testcase classname="AuthTests" name="test__145__JWT_and_realtime__when_using_authUrl__when_the_server_sends_and_AUTH_protocol_message__client_reauths_correctly_without_going_through_a_disconnection()" time="4.885763049125671">
        </testcase>
        <testcase classname="AuthTests" name="test__146__JWT_and_realtime__when_using_authCallback__with_valid_credentials__pulls_stats_successfully()" time="2.3804190158843994">
        </testcase>
        <testcase classname="AuthTests" name="test__147__JWT_and_realtime__when_using_authCallback__with_invalid_credentials__fails_to_connect()" time="1.3348640203475952">
        </testcase>
        <testcase classname="AuthTests" name="test__148__JWT_and_realtime__when_token_expires_and_has_a_means_to_renew__reconnects_using_authCallback_and_obtains_a_new_token()" time="1.7464449405670166">
        </testcase>
        <testcase classname="AuthTests" name="test__149__JWT_and_realtime__when_the_token_request_includes_a_clientId__the_clientId_is_the_same_specified_in_the_JWT_token_request()" time="0.22405600547790527">
        </testcase>
        <testcase classname="AuthTests" name="test__150__JWT_and_realtime__when_the_token_request_includes_subscribe_only_capabilities__fails_to_publish_to_a_channel_with_subscribe_only_capability()" time="0.40516090393066406">
        </testcase>
        <testcase classname="AuthTests" name="test__151__currentTokenDetails__should_hold_a__TokenDetails__instance_in_which_only_the__token__attribute_is_populated_with_that_token_string()" time="0.4586210250854492">
        </testcase>
        <testcase classname="AuthTests" name="test__152__currentTokenDetails__should_be_set_with_the_current_token__if_applicable__on_instantiation_and_each_time_it_is_replaced()" time="2.0902819633483887">
        </testcase>
        <testcase classname="AuthTests" name="test__153__currentTokenDetails__should_be_empty_if_there_is_no_current_token()" time="0.00693202018737793">
        </testcase>
        <testcase classname="AuthTests" name="test__154__JWT_and_rest__when_the_JWT_token_embeds_an_Ably_token__pulls_stats_successfully()" time="0.4572930335998535">
        </testcase>
        <testcase classname="AuthTests" name="test__155__JWT_and_rest__when_the_JWT_token_embeds_an_Ably_token_and_it_is_requested_as_encrypted__pulls_stats_successfully()" time="0.8755760192871094">
        </testcase>
        <testcase classname="AuthTests" name="test__156__JWT_and_rest__when_the_JWT_token_is_returned_with_application_jwt_content_type__the_client_successfully_connects_and_pulls_stats()" time="0.4981670379638672">
        </testcase>
        <testcase classname="AuthTests" name="test__157__JWT_and_rest__when_the_JWT_token_is_returned_with_application_jwt_content_type__the_client_can_request_a_new_token_to_initilize_another_client_that_connects_and_pulls_stats()" time="0.5039809942245483">
        </testcase>
        <testcase classname="BackoffRetryDelayCalculatorTests" name="test_delay()" time="0.00945889949798584">
        </testcase>
        <testcase classname="ChannelOptionsTests" name="test_copyChannelOptions()" time="0.009261012077331543">
        </testcase>
        <testcase classname="ChannelOptionsTests" name="test_copyingFrozenChannelOptions_createsUnfrozenCopy()" time="0.00047600269317626953">
        </testcase>
        <testcase classname="ChannelOptionsTests" name="test_copyingFrozenRealtimeChannelOptions_createsUnfrozenCopy()" time="0.013597965240478516">
        </testcase>
        <testcase classname="ChannelOptionsTests" name="test_copyRealtimeChannelOptions()" time="0.0011799335479736328">
        </testcase>
        <testcase classname="ClientInformationTests" name="testAgentIdentifierWithAdditionalAgents_withNilAdditionalAgents()" time="0.0017200708389282227">
        </testcase>
        <testcase classname="ClientInformationTests" name="testAgentIdentifierWithAdditionalAgents_withNonNilAdditionalAgents()" time="0.0005559921264648438">
        </testcase>
        <testcase classname="ClientInformationTests" name="testAgents()" time="0.00048100948333740234">
        </testcase>
        <testcase classname="ConnectRetryStateTests" name="test_addRetryAttempt()" time="0.0006500482559204102">
        </testcase>
        <testcase classname="ConnectRetryStateTests" name="test_transitionToConnectingOrDisconnectedStateDoesNotResetRetrySequence()" time="0.0005769729614257812">
        </testcase>
        <testcase classname="ConnectRetryStateTests" name="test_transitionToNonConnectingOrDisconnectedStateResetsRetrySequence()" time="0.0005390644073486328">
        </testcase>
        <testcase classname="CryptoTests" name="test__001__Crypto__getDefaultParams__returns_a_complete_CipherParams_instance__using_the_default_values_for_any_field_not_supplied()" time="0.00597691535949707">
        </testcase>
        <testcase classname="CryptoTests" name="test__002__Crypto__getDefaultParams__calculates_a_keyLength_from_the_key__its_size_in_bits_()" time="0.0008939504623413086">
        </testcase>
        <testcase classname="CryptoTests" name="test__003__Crypto__getDefaultParams__should_check_that_keyLength_is_valid_for_algorithm()" time="0.0009911060333251953">
        </testcase>
        <testcase classname="CryptoTests" name="test__004__Crypto__getDefaultParams__key_parameter__can_be_a_binary()" time="0.010253071784973145">
        </testcase>
        <testcase classname="CryptoTests" name="test__005__Crypto__getDefaultParams__key_parameter__can_be_a_base64_encoded_string_with_standard_encoding()" time="0.0020139217376708984">
        </testcase>
        <testcase classname="CryptoTests" name="test__006__Crypto__getDefaultParams__key_parameter__can_be_a_base64_encoded_string_with_URL_encoding()" time="0.0006719827651977539">
        </testcase>
        <testcase classname="CryptoTests" name="test__007__Crypto__generateRandomKey__takes_a_single_length_argument_and_returns_a_binary()" time="0.014027953147888184">
        </testcase>
        <testcase classname="CryptoTests" name="test__008__Crypto__generateRandomKey__takes_no_arguments_and_returns_the_default_algorithm_s_default_length()" time="0.0014640092849731445">
        </testcase>
        <testcase classname="CryptoTests" name="test__009__Crypto__generateHashSHA256__takes_data_and_returns_a_SHA256_digest()" time="0.0029469728469848633">
        </testcase>
        <testcase classname="CryptoTests" name="test__010__Crypto__encrypt__should_generate_a_new_IV_every_time_it_s_called__and_should_be_the_first_block_encrypted()" time="0.07648193836212158">
        </testcase>
        <testcase classname="CryptoTests" name="test__011__Crypto__with_fixtures_from_crypto_data_128_json__should_encrypt_messages_as_expected_in_the_fixtures()" time="0.011598944664001465">
        </testcase>
        <testcase classname="CryptoTests" name="test__012__Crypto__with_fixtures_from_crypto_data_128_json__should_decrypt_messages_as_expected_in_the_fixtures()" time="0.003425002098083496">
        </testcase>
        <testcase classname="CryptoTests" name="test__013__Crypto__with_fixtures_from_crypto_data_256_json__should_encrypt_messages_as_expected_in_the_fixtures()" time="0.006662964820861816">
        </testcase>
        <testcase classname="CryptoTests" name="test__014__Crypto__with_fixtures_from_crypto_data_256_json__should_decrypt_messages_as_expected_in_the_fixtures()" time="0.05297696590423584">
        </testcase>
        <testcase classname="CryptoTests" name="test__015__Crypto__with_fixtures_from_crypto_data_128_json__manual_decrypt_messages_as_expected_in_the_fixtures()" time="0.006695985794067383">
        </testcase>
        <testcase classname="CryptoTests" name="test__016__Crypto__with_fixtures_from_crypto_data_256_json__manual_decrypt_messages_as_expected_in_the_fixtures()" time="0.0104600191116333">
        </testcase>
        <testcase classname="DefaultErrorCheckerTests" name="test_isTokenError_statusCode401AndCodeBetween40140And40150()" time="0.0008280277252197266">
        </testcase>
        <testcase classname="DefaultErrorCheckerTests" name="test_isTokenError_statusCode401ButCodeGreaterThanOrEqualTo40150()" time="0.0005009174346923828">
        </testcase>
        <testcase classname="DefaultErrorCheckerTests" name="test_isTokenError_statusCode401ButCodeLessThan40140()" time="0.0016230344772338867">
        </testcase>
        <testcase classname="DefaultErrorCheckerTests" name="test_isTokenError_statusCodeNot401()" time="0.0013699531555175781">
        </testcase>
        <testcase classname="DefaultInternalLogCoreTests" name="test_initWithClientOptions_whenClientOptionsLogLevelIsNone()" time="0.002315044403076172">
        </testcase>
        <testcase classname="DefaultInternalLogCoreTests" name="test_initWithClientOptions_whenClientOptionsLogLevelIsNotNone()" time="0.0006250143051147461">
        </testcase>
        <testcase classname="DefaultInternalLogCoreTests" name="test_logLevel()" time="0.00040900707244873047">
        </testcase>
        <testcase classname="DefaultInternalLogCoreTests" name="test_logMessage()" time="0.0006400346755981445">
        </testcase>
        <testcase classname="DefaultInternalLogCoreTests" name="test_setLogLevel()" time="0.0071250200271606445">
        </testcase>
        <testcase classname="DefaultJitterCoefficientGeneratorTests" name="test_generatesAVarietyOfValues()" time="0.0006909370422363281">
        </testcase>
        <testcase classname="DefaultJitterCoefficientGeneratorTests" name="test_generatesValuesInExpectedRange()" time="0.0007020235061645508">
        </testcase>
        <testcase classname="DeltaCodecTests" name="test__001__withBinaryProtocol_DeltaCodec__decoding__should_decode_vcdiff_encoded_messages()" time="4.598843097686768">
        </testcase>
        <testcase classname="DeltaCodecTests" name="test__001__withoutBinaryProtocol_DeltaCodec__decoding__should_decode_vcdiff_encoded_messages()" time="4.622833967208862">
        </testcase>
        <testcase classname="DeltaCodecTests" name="test__002__DeltaCodec__decoding__should_fail_and_recover_when_the_vcdiff_messages_are_out_of_order()" time="0.11628198623657227">
        </testcase>
        <testcase classname="DeltaCodecTests" name="test__003__DeltaCodec__decoding__should_recover_when_the_vcdiff_message_decoding_fails()" time="0.10594797134399414">
        </testcase>
        <testcase classname="LocalDeviceStorageTests" name="test_atomicUpdateWritesAllKeysInOneFlush()" time="0.03797805309295654">
        </testcase>
        <testcase classname="LocalDeviceStorageTests" name="test_batchUpdateDoesNotReachDiskMidBatch()" time="0.03421211242675781">
        </testcase>
        <testcase classname="LocalDeviceStorageTests" name="test_discardsLegacyDataWhenKeychainSecretIsUnavailable()" time="0.03334200382232666">
        </testcase>
        <testcase classname="LocalDeviceStorageTests" name="test_migratesLegacyUserDefaultsOnFirstInit()" time="0.01956796646118164">
        </testcase>
        <testcase classname="LocalDeviceStorageTests" name="test_RSH3h_stateMachineConstructionLoadsTheDeviceWhenNotPreloaded()" time="0.004204988479614258">
        </testcase>
        <testcase classname="LocalDeviceStorageTests" name="test_RSH8a_RSH3h_persistedActivationStateDiscardedWhenDeviceDataIsIncomplete()" time="0.008889079093933105">
        </testcase>
        <testcase classname="LocalDeviceStorageTests" name="test_RSH8a_RSH3h_persistedActivationStateResumesWhenDeviceDataIsComplete()" time="0.005095005035400391">
        </testcase>
        <testcase classname="LocalDeviceStorageTests" name="test_storageFileIsCreated()" time="0.0059539079666137695">
        </testcase>
        <testcase classname="LocalDeviceStorageTests" name="test_writesAndReadsThroughTheProtocol()" time="0.010182023048400879">
        </testcase>
        <testcase classname="LogAdapterTests" name="test_logLevel()" time="0.0016030073165893555">
        </testcase>
        <testcase classname="LogAdapterTests" name="test_logMessage()" time="0.0005240440368652344">
        </testcase>
        <testcase classname="LogAdapterTests" name="test_setLogLevel()" time="0.03125905990600586">
        </testcase>
        <testcase classname="MessageUpdatesDeletesTests" name="test__RSL11__getMessage()" time="1.1994390487670898">
        </testcase>
        <testcase classname="MessageUpdatesDeletesTests" name="test__RSL15__appendMessage()" time="1.2345999479293823">
        </testcase>
        <testcase classname="MessageUpdatesDeletesTests" name="test__RSL15__deleteMessage()" time="1.2387069463729858">
        </testcase>
        <testcase classname="MessageUpdatesDeletesTests" name="test__RSL15__RSL14__updateMessage__and__getMessageVersions()" time="2.8850719928741455">
        </testcase>
        <testcase classname="MessageUpdatesDeletesTests" name="test__RTL28__getMessage()" time="1.262241005897522">
        </testcase>
        <testcase classname="MessageUpdatesDeletesTests" name="test__RTL32__appendMessage()" time="1.3431040048599243">
        </testcase>
        <testcase classname="MessageUpdatesDeletesTests" name="test__RTL32__deleteMessage()" time="1.361251950263977">
        </testcase>
        <testcase classname="MessageUpdatesDeletesTests" name="test__RTL32__RTL31__updateMessage__and__getMessageVersions()" time="2.362805962562561">
        </testcase>
        <testcase classname="MessageUpdatesDeletesTests" name="test_subscribeToAppends()" time="1.2650120258331299">
        </testcase>
        <testcase classname="ObjectLifetimesTests" name="test__001__ObjectLifetimes__user_code_releases_public_object__the_object_s_internal_child_s_back_reference_is_released_too()" time="0.018871068954467773">
        </testcase>
        <testcase classname="ObjectLifetimesTests" name="test__002__ObjectLifetimes__user_code_holds_only_reference_to_public_object_s_public_child__still_can_access_parent_s_internal_object()" time="0.025865912437438965">
        </testcase>
        <testcase classname="ObjectLifetimesTests" name="test__003__ObjectLifetimes__user_code_holds_only_reference_to_public_object_s_public_child__when_it_s_released__schedules_async_release_of_parent_s_internal_object_in_internal_queue()" time="0.0024410486221313477">
        </testcase>
        <testcase classname="ObjectLifetimesTests" name="test__004__ObjectLifetimes__when_user_leaves_Realtime_open__still_works()" time="0.14478695392608643">
        </testcase>
        <testcase classname="ObjectLifetimesTests" name="test__005__ObjectLifetimes__when_Realtime_is_closed_and_user_loses_its_reference__channels_don_t_leak()" time="0.11800897121429443">
        </testcase>
        <testcase classname="PluginAPITests" name="test_channelAttachedNotifiesPlugin()" time="0.07489502429962158">
        </testcase>
        <testcase classname="PluginAPITests" name="test_channelStateChangeNotifiesPlugin()" time="0.07240498065948486">
        </testcase>
        <testcase classname="PluginAPITests" name="test_connectionDetailsCallbackOnConnected()" time="0.05779600143432617">
        </testcase>
        <testcase classname="PluginAPITests" name="test_fetchServerTime()" time="0.07960808277130127">
        </testcase>
        <testcase classname="PluginAPITests" name="test_latestConnectionDetails()" time="0.06246304512023926">
        </testcase>
        <testcase classname="PluginAPITests" name="test_sendObject()" time="0.0601499080657959">
        </testcase>
        <testcase classname="PubSubDeviceTests" name="test__001__createClient__declares_the_device_agent_without_a_version()" time="0.005177974700927734">
        </testcase>
        <testcase classname="PubSubDeviceTests" name="test__002__createClient__leaves_the_callers_options_untouched()" time="0.03190898895263672">
        </testcase>
        <testcase classname="PubSubDeviceTests" name="test__003__createClient__preserves_agents_supplied_by_the_caller()" time="0.0023839473724365234">
        </testcase>
        <testcase classname="PubSubDeviceTests" name="test__004__createClient__the_declaration_wins_over_a_caller_entry_of_the_same_name()" time="0.0017690658569335938">
        </testcase>
        <testcase classname="PubSubDeviceTests" name="test__005__createClient__carries_over_the_rest_of_the_options()" time="0.001932978630065918">
        </testcase>
        <testcase classname="PubSubDeviceTests" name="test__006__createClient__accepts_a_key()" time="0.005632996559143066">
        </testcase>
        <testcase classname="PubSubDeviceTests" name="test__007__createClient__accepts_a_token()" time="0.0017260313034057617">
        </testcase>
        <testcase classname="PubSubDeviceTests" name="test__008__createClient__sends_the_declaration_on_the_realtime_connection()" time="0.12786006927490234">
        </testcase>
        <testcase classname="PubSubDeviceTests" name="test__009__createClient__sends_the_declaration_on_http_requests()" time="1.736372947692871">
        </testcase>
        <testcase classname="PubSubDeviceTests" name="test__010__the_core_constructor__declares_nothing()" time="0.0023480653762817383">
        </testcase>
        <testcase classname="PubSubDeviceTests" name="test__011__createClient__the_full_agent_identifier()" time="0.44241297245025635">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__001__should_remove_identityTokenDetails_from_cache_and_storage()" time="0.027848005294799805">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__002__Activation_state_machine__should_set_NotActivated_state_as_current_state_when_disk_is_empty()" time="0.04102003574371338">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__003__Activation_state_machine__should_read_the_current_state_from_disk()" time="0.0046770572662353516">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__004__Activation_state_machine__AfterRegistrationUpdateFailed_state_from_persistence_gets_migrated_to_AfterRegistrationSyncFailed()" time="0.00834202766418457">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__005__Activation_state_machine__should_queue_event_that_has_no_transition_defined_for_it()" time="0.023851990699768066">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__006__Activation_state_machine__event_handling_sould_be_atomic_and_sequential()" time="0.001665949821472168">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__007__Activation_state_machine__State_NotActivated__on_Event_CalledDeactivate__should_transition_to_NotActivated()" time="0.014208078384399414">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__008__Activation_state_machine__State_NotActivated__on_Event_GotPushDeviceDetails()" time="0.002034902572631836">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__009__Activation_state_machine__State_NotActivated__on_Event_CalledActivate__if_the_local_device_has_the_necessary_push_details_should_send_event_GotPushDeviceDetails()" time="0.006271004676818848">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__010__Activation_state_machine__State_NotActivated__on_Event_CalledActivate__none_of_them_then_should_transition_to_WaitingForPushDeviceDetails()" time="0.0024019479751586914">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__011__Activation_state_machine__State_NotActivated__on_Event_CalledActivate__the_local_device_has_id_and_deviceIdentityToken__emits_a_SyncRegistrationFailed_event_with_code_61002_if_client_IDs_don_t_match()" time="0.15827703475952148">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__012__Activation_state_machine__State_NotActivated__on_Event_CalledActivate__the_local_device_has_id_and_deviceIdentityToken__the_local_DeviceDetails_matches_the_instance_s_client_ID__calls_registerCallback__transitions_to_WaitingForRegistrationSync()" time="0.00683903694152832">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__013__Activation_state_machine__State_NotActivated__on_Event_CalledActivate__the_local_device_has_id_and_deviceIdentityToken__the_local_DeviceDetails_matches_the_instance_s_client_ID__PUTs_device_registration__transitions_to_WaitingForRegistrationSync()" time="0.004192948341369629">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__014__Activation_state_machine__State_NotActivated__on_Event_CalledActivate__local_device__should_have_a_generated_id()" time="0.002581954002380371">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__015__Activation_state_machine__State_NotActivated__on_Event_CalledActivate__local_device__should_have_a_generated_secret()" time="0.011961936950683594">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__016__Activation_state_machine__State_NotActivated__on_Event_CalledActivate__local_device__should_have_a_clientID_if_the_client_is_identified()" time="0.0012780427932739258">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__017__Activation_state_machine__State_WaitingForPushDeviceDetails__on_Event_CalledActivate()" time="0.0011069774627685547">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__018__Activation_state_machine__State_WaitingForPushDeviceDetails__on_Event_CalledDeactivate()" time="0.0025060176849365234">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__019__Activation_state_machine__State_WaitingForPushDeviceDetails__on_Event_GettingPushDeviceDetailsFailed()" time="0.004662990570068359">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__020__Activation_state_machine__State_WaitingForPushDeviceDetails__when_initializing_from_persistent_state_with_a_deviceToken__GotPushDeviceDetails_should_be_re_emitted()" time="0.027045011520385742">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__022__Activation_state_machine__State_WaitingForPushDeviceDetails__on_Event_GotPushDeviceDetails__should_use_custom_registerCallback_and_fire_GotDeviceRegistration_event()" time="0.02239704132080078">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__023__Activation_state_machine__State_WaitingForPushDeviceDetails__on_Event_GotPushDeviceDetails__should_use_custom_registerCallback_and_fire_GettingDeviceRegistrationFailed_event()" time="0.037873029708862305">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__024__Activation_state_machine__State_WaitingForPushDeviceDetails__on_Event_GotPushDeviceDetails__should_fire_GotDeviceRegistration_event()" time="0.006294965744018555">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__025__Activation_state_machine__State_WaitingForPushDeviceDetails__on_Event_GotPushDeviceDetails__should_fire_GettingDeviceRegistrationFailed_event()" time="0.016910910606384277">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__026__Activation_state_machine__State_WaitingForPushDeviceDetails__on_Event_GotPushDeviceDetails__should_transition_to_WaitingForDeviceRegistration()" time="0.0024290084838867188">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__027__Activation_state_machine__State_WaitingForDeviceRegistration__on_Event_CalledActivate()" time="0.0020749568939208984">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__028__Activation_state_machine__State_WaitingForDeviceRegistration__on_Event_GotDeviceRegistration()" time="0.006747007369995117">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__029__Activation_state_machine__State_WaitingForDeviceRegistration__on_Event_GettingDeviceRegistrationFailed()" time="0.009124040603637695">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__030__Activation_state_machine__State_WaitingForNewPushDeviceDetails__on_Event_CalledActivate()" time="0.0027409791946411133">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__031__Activation_state_machine__State_WaitingForNewPushDeviceDetails__on_Event_CalledDeactivate__should_use_custom_deregisterCallback_and_fire_Deregistered_event()" time="0.004580020904541016">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__032__Activation_state_machine__State_WaitingForNewPushDeviceDetails__on_Event_CalledDeactivate__should_use_custom_deregisterCallback_and_fire_DeregistrationFailed_event()" time="0.0019170045852661133">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__033__Activation_state_machine__State_WaitingForNewPushDeviceDetails__on_Event_CalledDeactivate__should_fire_Deregistered_event_and_include_DeviceSecret_HTTP_header()" time="0.07432091236114502">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__034__Activation_state_machine__State_WaitingForNewPushDeviceDetails__on_Event_CalledDeactivate__should_fire_Deregistered_event_and_include_DeviceIdentityToken_HTTP_header()" time="0.007481098175048828">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__035__Activation_state_machine__State_WaitingForNewPushDeviceDetails__on_Event_CalledDeactivate__should_fire_DeregistrationFailed_event()" time="0.010693907737731934">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__036__Activation_state_machine__State_WaitingForRegistrationSync_through_ARTPushActivationEventCalledActivate__on_Event_CalledActivate()" time="0.007189035415649414">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__037__Activation_state_machine__State_WaitingForRegistrationSync_through_ARTPushActivationEventCalledActivate__on_Event_RegistrationSynced()" time="0.003222942352294922">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__038__Activation_state_machine__State_WaitingForRegistrationSync_through_ARTPushActivationEventCalledActivate__on_Event_SyncRegistrationFailed()" time="0.0041130781173706055">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__039__Activation_state_machine__State_WaitingForRegistrationSync_through_ARTPushActivationEventGotPushDeviceDetails__on_Event_CalledActivate()" time="0.0017720460891723633">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__040__Activation_state_machine__State_WaitingForRegistrationSync_through_ARTPushActivationEventGotPushDeviceDetails__on_Event_RegistrationSynced()" time="0.0022350549697875977">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__041__Activation_state_machine__State_WaitingForRegistrationSync_through_ARTPushActivationEventGotPushDeviceDetails__on_Event_SyncRegistrationFailed()" time="0.001938939094543457">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__042__Activation_state_machine__State_AfterRegistrationSyncFailed__on_Event_CalledActivate__the_local_device_has_id_and_deviceIdentityToken__emits_a_SyncRegistrationFailed_event_with_code_61002_if_client_IDs_don_t_match()" time="0.006625056266784668">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__043__Activation_state_machine__State_AfterRegistrationSyncFailed__on_Event_CalledActivate__the_local_device_has_id_and_deviceIdentityToken__the_local_DeviceDetails_matches_the_instance_s_client_ID__calls_registerCallback__transitions_to_WaitingForRegistrationSync()" time="0.003153085708618164">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__044__Activation_state_machine__State_AfterRegistrationSyncFailed__on_Event_CalledActivate__the_local_device_has_id_and_deviceIdentityToken__the_local_DeviceDetails_matches_the_instance_s_client_ID__PUTs_device_registration__transitions_to_WaitingForRegistrationSync()" time="0.00468289852142334">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__045__Activation_state_machine__State_AfterRegistrationSyncFailed__on_Event_GotPushDeviceDetails__the_local_device_has_id_and_deviceIdentityToken__emits_a_SyncRegistrationFailed_event_with_code_61002_if_client_IDs_don_t_match()" time="0.0027579069137573242">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__046__Activation_state_machine__State_AfterRegistrationSyncFailed__on_Event_GotPushDeviceDetails__the_local_device_has_id_and_deviceIdentityToken__the_local_DeviceDetails_matches_the_instance_s_client_ID__calls_registerCallback__transitions_to_WaitingForRegistrationSync()" time="0.0023469924926757812">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__047__Activation_state_machine__State_AfterRegistrationSyncFailed__on_Event_GotPushDeviceDetails__the_local_device_has_id_and_deviceIdentityToken__the_local_DeviceDetails_matches_the_instance_s_client_ID__PUTs_device_registration__transitions_to_WaitingForRegistrationSync()" time="0.003545045852661133">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__048__Activation_state_machine__State_AfterRegistrationSyncFailed__on_Event_CalledDeactivate__should_use_custom_deregisterCallback_and_fire_Deregistered_event()" time="0.0051659345626831055">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__049__Activation_state_machine__State_AfterRegistrationSyncFailed__on_Event_CalledDeactivate__should_use_custom_deregisterCallback_and_fire_DeregistrationFailed_event()" time="0.009330034255981445">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__050__Activation_state_machine__State_AfterRegistrationSyncFailed__on_Event_CalledDeactivate__should_fire_Deregistered_event_and_include_DeviceSecret_HTTP_header()" time="0.0014410018920898438">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__051__Activation_state_machine__State_AfterRegistrationSyncFailed__on_Event_CalledDeactivate__should_fire_Deregistered_event_and_include_DeviceIdentityToken_HTTP_header()" time="0.001601099967956543">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__052__Activation_state_machine__State_AfterRegistrationSyncFailed__on_Event_CalledDeactivate__should_fire_DeregistrationFailed_event()" time="0.004758000373840332">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__053__Activation_state_machine__State_WaitingForDeregistration__on_Event_CalledDeactivate()" time="0.0010689496994018555">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__054__Activation_state_machine__State_WaitingForDeregistration__on_Event_Deregistered()" time="0.003720998764038086">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__055__Activation_state_machine__State_WaitingForDeregistration__on_Event_DeregistrationFailed()" time="0.00391697883605957">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__056__Activation_state_machine__should_be_possible_to_activate_and_deactivate_and_then_activate_again_with_different_clientId()" time="0.0035400390625">
        </testcase>
        <testcase classname="PushActivationStateMachineTests" name="test__100__Activation_state_machine__State_WaitingForNewPushDeviceDetails__on_Event_GotPushDeviceDetails__with_push_to_start_token__PATCHes_recipient()" time="0.010432958602905273">
        </testcase>
        <testcase classname="PushAdminTests" name="test__001__publish__should_perform_an_HTTP_request_to__push_publish()" time="0.005854964256286621">
        </testcase>
        <testcase classname="PushAdminTests" name="test__002__publish__should_publish_successfully()" time="0.16992700099945068">
        </testcase>
        <testcase classname="PushAdminTests" name="test__003__publish__should_fail_with_a_bad_recipient()" time="0.12595200538635254">
        </testcase>
        <testcase classname="PushAdminTests" name="test__004__publish__should_fail_with_an_empty_recipient()" time="0.06185293197631836">
        </testcase>
        <testcase classname="PushAdminTests" name="test__005__publish__should_fail_with_an_empty_payload()" time="0.04920399188995361">
        </testcase>
        <testcase classname="PushAdminTests" name="test__006__Device_Registrations__get__should_return_a_device()" time="0.05603301525115967">
        </testcase>
        <testcase classname="PushAdminTests" name="test__007__Device_Registrations__get__should_not_return_a_device_if_it_doesnt_exist()" time="0.07493603229522705">
        </testcase>
        <testcase classname="PushAdminTests" name="test__008__Device_Registrations__get__push_device_authentication__should_include_DeviceIdentityToken_HTTP_header()" time="0.004979968070983887">
        </testcase>
        <testcase classname="PushAdminTests" name="test__009__Device_Registrations__get__push_device_authentication__should_include_DeviceSecret_HTTP_header()" time="0.007127046585083008">
        </testcase>
        <testcase classname="PushAdminTests" name="test__010__Device_Registrations__list__should_list_devices_by_id()" time="0.13845288753509521">
        </testcase>
        <testcase classname="PushAdminTests" name="test__011__Device_Registrations__list__should_list_devices_by_client_id()" time="0.06733310222625732">
        </testcase>
        <testcase classname="PushAdminTests" name="test__012__Device_Registrations__list__should_list_devices_sorted()" time="0.07410407066345215">
        </testcase>
        <testcase classname="PushAdminTests" name="test__013__Device_Registrations__list__should_return_an_empty_list_when_id_does_not_exist()" time="0.11944293975830078">
        </testcase>
        <testcase classname="PushAdminTests" name="test__014__Device_Registrations__remove__should_unregister_a_device()" time="0.002250075340270996">
        </testcase>
        <testcase classname="PushAdminTests" name="test__015__Device_Registrations__save__should_register_a_device()" time="0.004174947738647461">
        </testcase>
        <testcase classname="PushAdminTests" name="test__016__Device_Registrations__save__push_device_authentication__should_include_DeviceIdentityToken_HTTP_header()" time="0.14954698085784912">
        </testcase>
        <testcase classname="PushAdminTests" name="test__017__Device_Registrations__save__push_device_authentication__should_include_DeviceSecret_HTTP_header()" time="0.008535981178283691">
        </testcase>
        <testcase classname="PushAdminTests" name="test__018__Device_Registrations__removeWhere__should_unregister_a_device()" time="0.057160019874572754">
        </testcase>
        <testcase classname="PushAdminTests" name="test__019__Channel_Subscriptions__save__should_add_a_subscription()" time="0.2200610637664795">
        </testcase>
        <testcase classname="PushAdminTests" name="test__020__Channel_Subscriptions__save__should_update_a_subscription()" time="0.27180004119873047">
        </testcase>
        <testcase classname="PushAdminTests" name="test__021__Channel_Subscriptions__save__should_fail_with_a_bad_recipient()" time="0.04282999038696289">
        </testcase>
        <testcase classname="PushAdminTests" name="test__022__Channel_Subscriptions__save__push_device_authentication__should_include_DeviceIdentityToken_HTTP_header()" time="0.0036209821701049805">
        </testcase>
        <testcase classname="PushAdminTests" name="test__023__Channel_Subscriptions__save__push_device_authentication__should_include_DeviceSecret_HTTP_header()" time="0.0035200119018554688">
        </testcase>
        <testcase classname="PushAdminTests" name="test__024__Channel_Subscriptions__list__should_receive_a_list_of_subscriptions()" time="0.10280895233154297">
        </testcase>
        <testcase classname="PushAdminTests" name="test__025__Channel_Subscriptions__listChannels__should_receive_a_list_of_subscriptions()" time="0.062103986740112305">
        </testcase>
        <testcase classname="PushAdminTests" name="test__026__Channel_Subscriptions__remove__should_remove_a_subscription()" time="0.24294805526733398">
        </testcase>
        <testcase classname="PushAdminTests" name="test__027__Channel_Subscriptions__remove__push_device_authentication__should_include_DeviceIdentityToken_HTTP_header()" time="0.005710005760192871">
        </testcase>
        <testcase classname="PushAdminTests" name="test__028__Channel_Subscriptions__remove__push_device_authentication__should_include_DeviceSecret_HTTP_header()" time="0.005357980728149414">
        </testcase>
        <testcase classname="PushAdminTests" name="test__029__Channel_Subscriptions__removeWhere__should_remove_by_cliendId()" time="1.1524879932403564">
        </testcase>
        <testcase classname="PushAdminTests" name="test__030__Channel_Subscriptions__removeWhere__should_remove_by_cliendId_and_channel()" time="0.2577400207519531">
        </testcase>
        <testcase classname="PushAdminTests" name="test__031__Channel_Subscriptions__removeWhere__should_remove_by_deviceId()" time="0.3812239170074463">
        </testcase>
        <testcase classname="PushAdminTests" name="test__032__Channel_Subscriptions__removeWhere__should_not_remove_by_inexistent_deviceId()" time="0.18906009197235107">
        </testcase>
        <testcase classname="PushAdminTests" name="test__033__local_device__should_include_an_id_and_a_secret()" time="0.0018939971923828125">
        </testcase>
        <testcase classname="PushChannelTests" name="test__001__Push_Channel__subscribeDevice__should_fail_if_the_LocalDevice_doesn_t_have_an_deviceIdentityToken()" time="0.004526972770690918">
        </testcase>
        <testcase classname="PushChannelTests" name="test__002__Push_Channel__subscribeDevice__should_do_a_POST_request_to__push_channelSubscriptions_and_include_device_authentication()" time="0.019757986068725586">
        </testcase>
        <testcase classname="PushChannelTests" name="test__003__Push_Channel__subscribeClient__should_fail_if_the_LocalDevice_doesn_t_have_a_clientId()" time="0.007254958152770996">
        </testcase>
        <testcase classname="PushChannelTests" name="test__004__Push_Channel__subscribeClient__should_do_a_POST_request_to__push_channelSubscriptions()" time="0.005205988883972168">
        </testcase>
        <testcase classname="PushChannelTests" name="test__005__Push_Channel__unsubscribeDevice__should_fail_if_the_LocalDevice_doesn_t_have_a_deviceIdentityToken()" time="0.001671910285949707">
        </testcase>
        <testcase classname="PushChannelTests" name="test__006__Push_Channel__unsubscribeDevice__should_do_a_DELETE_request_to__push_channelSubscriptions_and_include_device_authentication()" time="0.018918991088867188">
        </testcase>
        <testcase classname="PushChannelTests" name="test__007__Push_Channel__unsubscribeClient__should_fail_if_the_LocalDevice_doesn_t_have_a_clientId()" time="0.004981040954589844">
        </testcase>
        <testcase classname="PushChannelTests" name="test__008__Push_Channel__unsubscribeClient__should_do_a_DELETE_request_to__push_channelSubscriptions()" time="0.002853989601135254">
        </testcase>
        <testcase classname="PushChannelTests" name="test__009__Push_Channel__listSubscriptions__should_return_a_paginated_result_with_PushChannelSubscription_filtered_by_channel_and_device()" time="0.010474085807800293">
        </testcase>
        <testcase classname="PushChannelTests" name="test__010__Push_Channel__listSubscriptions__should_return_a_paginated_result_with_PushChannelSubscription_filtered_by_channel_and_client()" time="0.0029729604721069336">
        </testcase>
        <testcase classname="PushChannelTests" name="test__011__Push_Channel__listSubscriptions__should_not_accept_null_deviceId_and_null_clientId()" time="0.006451010704040527">
        </testcase>
        <testcase classname="PushChannelTests" name="test__012__Push_Channel__listSubscriptions__should_not_accept_both_deviceId_and_clientId_params_at_the_same_time()" time="0.0012990236282348633">
        </testcase>
        <testcase classname="PushChannelTests" name="test__013__Push_Channel__listSubscriptions__should_return_a_paginated_result_with_PushChannelSubscription()" time="0.28060996532440186">
        </testcase>
        <testcase classname="PushTests" name="test__001__activation__activate_method_should_send_a_CalledActivate_event_to_the_state_machine()" time="0.003692030906677246">
        </testcase>
        <testcase classname="PushTests" name="test__002__activation__deactivate_method_should_send_a_CalledDeactivate_event_to_the_state_machine()" time="0.0013730525970458984">
        </testcase>
        <testcase classname="PushTests" name="test__003__activation__should_handle_GotPushDeviceDetails_event_when_platform_s_APIs_sends_the_details_for_push_notifications()" time="0.0022089481353759766">
        </testcase>
        <testcase classname="PushTests" name="test__004__activation__sends_GettingPushDeviceDetailsFailed_when_push_registration_fails()" time="0.0026150941848754883">
        </testcase>
        <testcase classname="PushTests" name="test__005__activation__should_update_LocalDevice_clientId_when_it_s_null_with_auth_clientId()" time="0.0441739559173584">
        </testcase>
        <testcase classname="PushTests" name="test__006__activation__should_store_the_device_token_data_as_string()" time="0.0027250051498413086">
        </testcase>
        <testcase classname="PushTests" name="test__007__activation__should_not_sync_the_local_device_dispatched_in_internal_queue()" time="0.011368989944458008">
        </testcase>
        <testcase classname="PushTests" name="test__008__LocalDevice__has_a_device_method_that_returns_a_LocalDevice()" time="0.0035299062728881836">
        </testcase>
        <testcase classname="PushTests" name="test__009__LocalDevice__the_device_is_lazily_populated_from_the_persisted_state()" time="0.0014801025390625">
        </testcase>
        <testcase classname="PushTests" name="test__010__LocalDevice__authentication_on_registered_device_sends_a_GotPushDeviceDetails_with_new_clientID()" time="3.1197699308395386">
        </testcase>
        <testcase classname="PushTests" name="test__011__LocalDevice__sets_device_s_client_ID_from_registration_response()" time="0.0028020143508911133">
        </testcase>
        <testcase classname="PushTests" name="test__012__LocalDevice__when_using_token_authentication__new_clientID_is_set()" time="0.1466519832611084">
        </testcase>
        <testcase classname="PushTests" name="test__013__LocalDevice__when_getting_a_client_ID_from_CONNECTED_message__new_clientID_is_set()" time="0.00521397590637207">
        </testcase>
        <testcase classname="PushTests" name="test__014__Registerer_Delegate_option__a_successful_activation_should_call_the_correct_registerer_delegate_method()" time="0.04138195514678955">
        </testcase>
        <testcase classname="PushTests" name="test__015__Registerer_Delegate_option__registerer_delegate_should_not_hold_a_strong_instance_reference()" time="0.017737984657287598">
        </testcase>
        <testcase classname="PushTests" name="test__016__activate_should_call_registerForAPNS_while_transition_from_not_activated()" time="0.0016449689865112305">
        </testcase>
        <testcase classname="PushTests" name="test__017__LocalDevice__must_verify_the_validity_of_saved_push_details_and_update_if_needed_on_the_Ably_server_by_triggering_GotPushDeviceDetails()" time="0.00297701358795166">
        </testcase>
        <testcase classname="PushTests" name="test__018__LocalDevice__when_alternative_device_token_available_update_push_details_on_the_Ably_server_by_triggering_GotPushDeviceDetails()" time="0.0023080110549926758">
        </testcase>
        <testcase classname="PushTests" name="test__100__push_to_start__registerPushToStartToken_stores_token_and_sends_GotPushDeviceDetails()" time="0.0022579431533813477">
        </testcase>
        <testcase classname="RealtimeAnnotationsTests" name="test__annotation_data_uses_a_cipher_added_by_setOptions_after_channel_creation()" time="0.16383397579193115">
        </testcase>
        <testcase classname="RealtimeAnnotationsTests" name="test__annotations_subscribe_should_implicitly_attach_the_channel_if_options_attachOnSubscribe_is_true()" time="0.15471291542053223">
            <failure message="XCTAssertNil failed: &quot;Error 80017 - connection broken before receiving publishing acknowledgment&quot; (/Users/runner/work/ably-cocoa/ably-cocoa/Test/AblyTests/Tests/RealtimeAnnotationsTests.swift#EndingLineNumber=432&amp;StartingLineNumber=432)">
            </failure>
        </testcase>
        <testcase classname="RealtimeAnnotationsTests" name="test__annotations_subscribe_should_implicitly_attach_the_channel_if_options_attachOnSubscribe_is_true()" time="0.08910393714904785">
        </testcase>
        <testcase classname="RealtimeAnnotationsTests" name="test__annotations_subscribe_should_not_implicitly_attach_the_channel_if_options_attachOnSubscribe_is_false()" time="1.0521079301834106">
        </testcase>
        <testcase classname="RealtimeAnnotationsTests" name="test__annotations_subscribe_should_not_result_in_an_error_if_channel_is_in_the_FAILED_state_and_options_attachOnSubscribe_is_false()" time="1.0723979473114014">
        </testcase>
        <testcase classname="RealtimeAnnotationsTests" name="test__annotations_subscribe_should_result_in_an_error_if_channel_is_in_the_FAILED_state_and_options_attachOnSubscribe_is_true()" time="0.004697918891906738">
        </testcase>
        <testcase classname="RealtimeAnnotationsTests" name="test__if_annotation_subscribe_mode_is_missing_from_channel_options_then_subscription_will_not_work()" time="1.603863000869751">
        </testcase>
        <testcase classname="RealtimeAnnotationsTests" name="test__publish_annotation_exceeding_max_message_size()" time="0.06939196586608887">
        </testcase>
        <testcase classname="RealtimeAnnotationsTests" name="test__publish_delete_and_get_annotations()" time="3.192360997200012">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__001__Channel__should_process_all_incoming_messages_and_presence_messages_as_soon_as_a_Channel_becomes_attached()" time="0.5682361125946045">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__002__Channel__should_not_crash_when_an_ATTACH_request_is_responded_with_a_DETACHED()" time="0.04700303077697754">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__003__Channel__EventEmitter__channel_states_and_events__should_implement_the_EventEmitter_and_emit_events_for_state_changes()" time="0.06059002876281738">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__004__Channel__EventEmitter__channel_states_and_events__should_implement_the_EventEmitter_and_emit_events_for_FAILED_state_changes()" time="0.07561898231506348">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__005__Channel__EventEmitter__channel_states_and_events__should_implement_the_EventEmitter_and_emit_events_for_SUSPENDED_state_changes()" time="0.04522597789764404">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__006__Channel__EventEmitter__channel_states_and_events__can_emit_an_UPDATE_event()" time="0.0477520227432251">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__007__Channel__EventEmitter__channel_states_and_events__should_not_emit_detached_event_on_an_already_detached_channel()" time="0.06080293655395508">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__008__Channel__EventEmitter__channel_states_and_events__state_attribute_should_be_the_current_state_of_the_channel()" time="0.05515599250793457">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__009__Channel__EventEmitter__channel_states_and_events__should_contain_an_ErrorInfo_object_with_details_when_an_error_occurs()" time="0.0067909955978393555">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__010__Channel__EventEmitter__channel_states_and_events__a_ChannelStateChange_is_emitted_as_the_first_argument_for_every_channel_state_change()" time="0.18028700351715088">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__011a__Channel__EventEmitter__channel_states_and_events__ChannelStateChange_will_contain_a_resumed_boolean_attribute_with_value__true__if_the_bit_flag_RESUMED_was_included()" time="4.183151006698608">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__011b__Channel__EventEmitter__channel_states_and_events__ChannelStateChange_will_contain_a_resumed_boolean_attribute_with_value__true__if_the_bit_flag_RESUMED_was_included_for_recovered_connection()" time="0.10091698169708252">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__013__Channel__connection_state__if_the_connection_state_enters_the_CONNECTED_state__then_a_SUSPENDED_channel_will_transition_to_ATTACHING_and_goes_back_to_SUSPNDED_on_timeout()" time="3.3531159162521362">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__015__Channel__connection_state__should_attach_successfully_and_remain_attached_after_the_connection_goes_from_SUSPENDED_to_CONNECTED()" time="7.885765075683594">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__016__Channel__connection_state__if_the_connection_state_enters_the_DISCONNECTED_state__it_will_have_no_effect_on_the_channel_states()" time="4.0685189962387085">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__017__Channel__connection_state__changes_to_FAILED__ATTACHING_channel_should_transition_to_FAILED()" time="0.005762934684753418">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__018__Channel__connection_state__changes_to_FAILED__ATTACHED_channel_should_transition_to_FAILED()" time="0.07705700397491455">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__019__Channel__connection_state__changes_to_FAILED__channel_being_released_waiting_for_DETACH_shouldn_t_crash__issue__918_()" time="0.021196961402893066">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__020__Channel__connection_state__changes_to_FAILED__should_immediately_fail_if_not_in_the_connected_state()" time="0.004367947578430176">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__021__Channel__connection_state__changes_to_FAILED__should_keep_the_channels_attached_when_client_reconnected_successfully_and_queue_messages_is_disabled()" time="0.09235692024230957">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__022__Channel__connection_state__changes_to_CLOSED__ATTACHING_channel_should_transition_to_DETACHED()" time="0.19457101821899414">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__023__Channel__connection_state__changes_to_CLOSED__ATTACHED_channel_should_transition_to_DETACHED()" time="0.09534788131713867">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__024__Channel__connection_state__changes_to_SUSPENDED__ATTACHING_channel_should_transition_to_SUSPENDED()" time="0.1333979368209839">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__025__Channel__connection_state__changes_to_SUSPENDED__ATTACHED_channel_should_transition_to_SUSPENDED()" time="0.04336202144622803">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__026__Channel__connection_state__changes_to_SUSPENDED__channel_being_released_waiting_for_DETACH_shouldn_t_crash__issue__918_()" time="0.019379019737243652">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__027__Channel__attach__if_already_ATTACHED_or_ATTACHING_nothing_is_done()" time="0.053836941719055176">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__028__Channel__attach__if_the_user_does_not_have_sufficient_permissions_to_attach__then_the_channel_will_transition_to_FAILED_and_set_the_errorReason()" time="0.1916670799255371">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__029__Channel__attach__if_the_channel_is_in_the_FAILED_state__the_attach_request_sets_its_errorReason_to_null__and_proceeds_with_a_channel_attach()" time="0.06911289691925049">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__030__Channel__attach__should_send_an_ATTACH_ProtocolMessage__change_state_to_ATTACHING_and_change_state_to_ATTACHED_after_confirmation()" time="0.05629301071166992">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__031__Channel__attach__should_transition_the_channel_state_to_FAILED_if_the_user_does_not_have_sufficient_permissions()" time="0.07385897636413574">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__032__Channel__attach__should_transition_the_channel_state_to_SUSPENDED_if_ATTACHED_ProtocolMessage_is_not_received()" time="2.089461088180542">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__033__Channel__attach__if_called_with_a_callback_should_call_it_once_attached()" time="0.16997897624969482">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__034__Channel__attach__if_called_with_a_callback_and_already_attaching_should_call_the_callback_once_attached()" time="0.1192770004272461">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__035__Channel__attach__if_called_with_a_callback_and_already_attached_should_call_the_callback_with_nil_error()" time="0.12594103813171387">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__036__Channel__attach__if_the_channel_is_in_a_pending_state_ATTACHING__do_the_attach_operation_after_the_completion_of_the_pending_request()" time="0.06268095970153809">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__037__Channel__attach__if_the_channel_is_in_a_pending_state_DETACHING__do_the_attach_operation_after_the_completion_of_the_pending_request()" time="0.06118595600128174">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__038__Channel__attach__a_channel_in_DETACHING_can_actually_move_back_to_ATTACHED_if_it_fails_to_detach()" time="1.1069899797439575">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__039__Channel__attach__results_in_an_error_if_the_connection_state_is__CLOSING()" time="0.043753981590270996">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__040__Channel__attach__results_in_an_error_if_the_connection_state_is__CLOSED()" time="0.043527960777282715">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__041__Channel__attach__results_in_an_error_if_the_connection_state_is__SUSPENDED()" time="0.002747058868408203">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__042__Channel__attach__results_in_an_error_if_the_connection_state_is__FAILED()" time="0.001922011375427246">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__043__Channel__attach__happens_when_connection_is_CONNECTED_if_it_s_currently__INITIALIZED()" time="0.17933297157287598">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__044__Channel__attach__happens_when_connection_is_CONNECTED_if_it_s_currently__CONNECTING()" time="0.05079507827758789">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__045__Channel__attach__happens_when_connection_is_CONNECTED_if_it_s_currently__DISCONNECTED()" time="0.18747901916503906">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__046__Channel__attach__attach_resume__should_pass_attach_resume_flag_in_attach_message()" time="0.15621793270111084">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__047__Channel__attach__attach_resume__should_have_correct_AttachResume_value()" time="0.06825494766235352">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__048__Channel__attach__attach_resume__should_encode_correctly_the_AttachResume_flag()" time="2.2580480575561523">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__049__Channel__detach__if_state_is_INITIALIZED_or_DETACHED_nothing_is_done()" time="0.057254910469055176">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__050__Channel__detach__if_the_channel_is_in_a_pending_state_DETACHING__do_the_detach_operation_after_the_completion_of_the_pending_request()" time="1.086311936378479">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__051__Channel__detach__if_the_channel_is_in_a_pending_state_ATTACHING__do_the_detach_operation_after_the_completion_of_the_pending_request()" time="0.047438979148864746">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__052__Channel__detach__results_in_an_error_if_the_connection_state_is_FAILED()" time="0.0041120052337646484">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__053__Channel__detach__should_send_a_DETACH_ProtocolMessage__change_state_to_DETACHING_and_change_state_to_DETACHED_after_confirmation()" time="0.056741952896118164">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__054__Channel__detach__if_called_with_a_callback_should_call_it_once_detached()" time="0.048043012619018555">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__055__Channel__detach__if_called_with_a_callback_and_already_detaching_should_call_the_callback_once_detached()" time="0.08916604518890381">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__056__Channel__detach__if_called_with_a_callback_and_already_detached_should_should_call_the_callback_with_nil_error()" time="0.06602191925048828">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__057__Channel__detach__if_a_DETACHED_is_not_received_within_the_default_realtime_request_timeout__the_detach_request_should_be_treated_as_though_it_has_failed_and_the_channel_will_return_to_its_previous_state()" time="1.0619829893112183">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__058__Channel__detach__if_the_channel_state_is_SUSPENDED__the__detach__request_transitions_the_channel_immediately_to_the_DETACHED_state()" time="0.07051098346710205">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__059__Channel__detach__results_in_an_error_if_the_connection_state_is__CLOSING()" time="0.0661320686340332">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__060__Channel__detach__results_in_an_error_if_the_connection_state_is__FAILED()" time="0.06326603889465332">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__061__Channel__detach__happens_when_channel_is_ATTACHED_if_connection_is_currently__INITIALIZED()" time="0.0757819414138794">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__062__Channel__detach__happens_when_channel_is_ATTACHED_if_connection_is_currently__CONNECTING()" time="0.06516408920288086">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__063__Channel__detach__happens_when_channel_is_ATTACHED_if_connection_is_currently__DISCONNECTED()" time="0.3180350065231323">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__064__Channel__publish__should_encode_messages_in_the_same_way_as_the_RestChannel()" time="0.10883498191833496">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__065__Channel__publish__Message_connectionId_should_match_the_current_Connection_id_for_all_published_messages()" time="0.06758391857147217">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__066__Channel__publish__should_provide_an_optional_argument_that_allows_the_clientId_value_to_be_specified()" time="0.06071007251739502">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__067__Channel__publish__should_invoke_callback__when_the_message_is_successfully_delivered()" time="0.061033010482788086">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__068__Channel__publish__should_invoke_callback__upon_failure()" time="0.377627968788147">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__069__Channel__publish__should_invoke_callback__for_all_messages_published()" time="0.8931030035018921">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__070__Channel__publish__Connection_state_conditions__publish_should_not_trigger_an_implicit_attach()" time="0.07041800022125244">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__071__Channel__publish__Connection_state_conditions__if_the_connection_is_CONNECTED_and_the_channel_is__ATTACHED_then_the_messages_should_be_published_immediately()" time="0.049906015396118164">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__072__Channel__publish__Connection_state_conditions__if_the_connection_is_CONNECTED_and_the_channel_is__INITIALIZED_then_the_messages_should_be_published_immediately()" time="0.04885697364807129">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__073__Channel__publish__Connection_state_conditions__if_the_connection_is_CONNECTED_and_the_channel_is__DETACHED_then_the_messages_should_be_published_immediately()" time="0.06695401668548584">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__074__Channel__publish__Connection_state_conditions__if_the_connection_is_CONNECTED_and_the_channel_is__ATTACHING_then_the_messages_should_be_published_immediately()" time="0.06635403633117676">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__075__Channel__publish__Connection_state_conditions__if_the_connection_is_CONNECTED_and_the_channel_is__DETACHING_then_the_messages_should_be_published_immediately()" time="0.07962298393249512">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__076__Channel__publish__Connection_state_conditions__the_message__should_be_queued_and_delivered_as_soon_as_the_connection_state_returns_to_CONNECTED_if_the_connection_is__INITIALIZED()" time="0.08695101737976074">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__077__Channel__publish__Connection_state_conditions__the_message__should_be_queued_and_delivered_as_soon_as_the_connection_state_returns_to_CONNECTED_if_the_connection_is__CONNECTING()" time="0.09055089950561523">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__078__Channel__publish__Connection_state_conditions__the_message__should_be_queued_and_delivered_as_soon_as_the_connection_state_returns_to_CONNECTED_if_the_connection_is__DISCONNECTED()" time="0.2173140048980713">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__082__Channel__publish__Connection_state_conditions__will_result_in_an_error_if_the__connection_is_SUSPENDED()" time="0.033255934715270996">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__083__Channel__publish__Connection_state_conditions__will_result_in_an_error_if_the__connection_is_CLOSING()" time="0.043485045433044434">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__084__Channel__publish__Connection_state_conditions__will_result_in_an_error_if_the__connection_is_CLOSED()" time="0.174981951713562">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__085__Channel__publish__Connection_state_conditions__will_result_in_an_error_if_the__connection_is_FAILED()" time="0.03376293182373047">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__086__Channel__publish__Connection_state_conditions__will_result_in_an_error_if_the__channel_is_SUSPENDED()" time="0.054376959800720215">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__087__Channel__publish__Connection_state_conditions__will_result_in_an_error_if_the__channel_is_FAILED()" time="0.054226040840148926">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__095__Channel__publish__Unidentified_clients_using_Basic_Auth__should_have_the_provided_clientId_on_received_message_when_it_was_published_with_clientId()" time="0.05689799785614014">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__096__Channel__publish__expect_either__an_array_of_Message_objects()" time="0.060150980949401855">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__097__Channel__publish__expect_either__a_name_string_and_data_payload()" time="0.10393691062927246">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__098__Channel__publish__expect_either__allows_name_to_be_null()" time="0.18247997760772705">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__099__Channel__publish__expect_either__allows_data_to_be_null()" time="0.05987691879272461">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__100__Channel__publish__expect_either__allows_name_and_data_to_be_assigned()" time="0.08924305438995361">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__101__Channel__publish__Identified_clients_with_clientId__when_publishing_a_Message_with_the_clientId_attribute_value_set_to_the_identified_client_s_clientId()" time="0.08322501182556152">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__102__Channel__publish__Identified_clients_with_clientId__when_publishing_a_Message_with_a_different_clientId_attribute_value_from_the_identified_client_s_clientId__it_should_reject_that_publish_operation_immediately()" time="0.0631328821182251">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__103__Channel__publish__Identified_clients_with_clientId__message_should_be_published_following_authentication_and_received_back_with_the_clientId_intact()" time="0.09709906578063965">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__104__Channel__publish__Identified_clients_with_clientId__message_should_be_rejected_by_the_Ably_service_and_the_message_error_should_contain_the_server_error()" time="0.08617806434631348">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__105__Channel__publish__Identified_clients_with_clientId__When_publishing_a_Message_with_clientId_set_to_null__should_be_unnecessary_to_set_clientId_of_the_Message_before_publishing_and_have_clientId_value_set_for_the_Message_when_received()" time="0.0667719841003418">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__106__Channel__subscribe__with_no_arguments_subscribes_a_listener_to_all_messages()" time="0.06544804573059082">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__107__Channel__subscribe__with_a_single_name_argument_subscribes_a_listener_to_only_messages_whose_name_member_matches_the_string_name()" time="0.053436994552612305">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__108__Channel__subscribe__with_a_attach_callback_should_subscribe_and_call_the_callback_when_attached()" time="0.05746197700500488">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__109__Channel__subscribe__should_implicitly_attach_the_channel_if_options_attachOnSubscribe_is_true()" time="0.10639798641204834">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__109b__Channel__subscribe__should_not_implicitly_attach_the_channel_if_options_attachOnSubscribe_is_false()" time="1.0120220184326172">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__110__Channel__subscribe__should_result_in_an_error_if_channel_is_in_the_FAILED_state_and_options_attachOnSubscribe_is_true()" time="0.006825089454650879">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__110b__Channel__subscribe__should_not_result_in_an_error_if_channel_is_in_the_FAILED_state_and_options_attachOnSubscribe_is_false()" time="1.0578041076660156">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__111__Channel__subscribe__should_exist_ensuring_published_messages_are_not_echoed_back_to_the_subscriber_when_echoMessages_is_false()" time="1.1324288845062256">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__112__Channel__subscribe__should_deliver_the_message_even_if_there_is_an_error_while_decoding__using_crypto_data_128()" time="0.048915982246398926">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__113__Channel__subscribe__should_deliver_the_message_even_if_there_is_an_error_while_decoding__using_crypto_data_256()" time="0.045668959617614746">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__114__Channel__subscribe__message_cannot_be_decoded_or_decrypted__should_deliver_with_encoding_attribute_set_indicating_the_residual_encoding_and_error_should_be_emitted()" time="0.05434691905975342">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__115__Channel__unsubscribe__with_no_arguments_unsubscribes_the_provided_listener_to_all_messages_if_subscribed()" time="0.13623201847076416">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__116__Channel__unsubscribe__with_a_single_name_argument_unsubscribes_the_provided_listener_if_previously_subscribed_with_a_name_specific_subscription()" time="0.05235302448272705">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__117__Channel__history__should_support_all_the_same_params_as_Rest()" time="0.3919459581375122">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__118__Channel__history__should_return_a_PaginatedResult_page()" time="0.13743889331817627">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__119__Channel__history__should_retrieve_all_available_messages()" time="0.25660502910614014">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__120__Channel__history__attached_channel_may_receive_an_additional_ATTACHED_ProtocolMessage()" time="0.05102396011352539">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__121__Channel__history__If_an_ERROR_ProtocolMessage_is_received_for_this_channel_then_the_channel_should_immediately_transition_to_the_FAILED_state__the_errorReason_should_be_set_and_an_error_should_be_emitted_on_the_channel()" time="0.047320008277893066">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__122__Channel__history__should_not_emit_messages_to_subscribers_if_the_channel_is_in_any_state_other_than_ATTACHED()" time="3.2083719968795776">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__123__Channel__history__supports_the_param_untilAttach__should_be_false_as_default()" time="0.0005589723587036133">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__124__Channel__history__supports_the_param_untilAttach__should_invoke_an_error_when_the_untilAttach_is_specified_and_the_channel_is_not_attached()" time="0.0291520357131958">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__125__Channel__history__supports_the_param_untilAttach__where_value_is_true__should_pass_the_querystring_param_fromSerial_with_the_serial_number_assigned_to_the_channel()" time="0.13406097888946533">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__126__Channel__history__supports_the_param_untilAttach__where_value_is_false__should_pass_the_querystring_param_fromSerial_with_the_serial_number_assigned_to_the_channel()" time="0.13652992248535156">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__127__Channel__history__supports_the_param_untilAttach__should_retrieve_messages_prior_to_the_moment_that_the_channel_was_attached()" time="0.6353518962860107">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__128__Channel__history__if_the_channel_receives_a_server_initiated_DETACHED_message_when__the_channel_is_in_the_ATTACHED_states__an_attempt_to_reattach_the_channel_should_be_made_immediately_by_sending_a_new_ATTACH_message_and_the_channel_should_transition_to_the_ATTACHING_state_with_the_error_emitted_in_the_ChannelStateChange_event()" time="0.05049705505371094">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__129__Channel__history__if_the_channel_receives_a_server_initiated_DETACHED_message_when__the_channel_is_in_the_SUSPENDED_state__an_attempt_to_reattach_the_channel_should_be_made_immediately_by_sending_a_new_ATTACH_message_and_the_channel_should_transition_to_the_ATTACHING_state_with_the_error_emitted_in_the_ChannelStateChange_event()" time="1.0457409620285034">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__130__Channel__history__if_the_channel_receives_a_server_initiated_DETACHED_message_when__if_the_attempt_to_re_attach_fails_the_channel_will_transition_to_the_SUSPENDED_state_and_the_error_will_be_emitted_in_the_ChannelStateChange_event()" time="2.1326159238815308">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__131__Channel__history__if_the_channel_receives_a_server_initiated_DETACHED_message_when__if_the_channel_was_already_in_the_ATTACHING_state__the_channel_will_transition_to_the_SUSPENDED_state_and_the_error_will_be_emitted_in_the_ChannelStateChange_event()" time="0.044082045555114746">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__131b__Channel__if_the_channel_receives_a_server_initiated_DETACHED_message_and_if_the_attempt_to_reattach_fails_then_the_channel_will_transition_to_SUSPENDED_state_with_periodic_reattach_with_channelRetryTimeout()" time="12.491289019584656">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__132__Channel__history__if_the_channel_receives_a_server_initiated_DETACHED_message_when__if_the_connection_is_no_longer_CONNECTED__then_the_automatic_attempts_to_re_attach_the_channel_must_be_cancelled()" time="1.0644869804382324">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__133__Channel__history__Channel_options__setOptions__should_send_an_ATTACH_message_with_params___modes_if_the_channel_is_attached()" time="0.05995798110961914">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__134__Channel__history__Channel_options__setOptions__should_send_an_ATTACH_message_with_params___modes_if_the_channel_is_attaching()" time="0.050125956535339355">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__135__Channel__history__Channel_options__setOptions__should_success_immediately_if_channel_is_not_attaching_or_attached()" time="0.002128005027770996">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__136__Channel__history__Channel_options__setOptions__should_fail_if_the_attach_moves_to_FAILED()" time="0.06639599800109863">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__137__Channel__history__Channel_options__setOptions__should_fail_if_the_attach_moves_to_DETACHED()" time="0.04447197914123535">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__138__Channel__crypto__if_configured_for_encryption__channels_encrypt_and_decrypt_messages__data()" time="0.5816850662231445">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__139__message_attributes__if_the_message_does_not_contain_an_id__it_should_be_set_to_protocolMsgId_index()" time="0.05126392841339111">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__140__ChannelOptions__options_provided_when_instantiating_a_channel_should_be_frozen()" time="0.010185003280639648">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__141__ChannelOptions__on_ATTACHED_should_decode_flags_into_array_of_channel_modes()" time="0.0014150142669677734">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__142__publish__with_resultCallback__returns_valid_ARTPublishResult_with_message_serials()" time="0.057250022888183594">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__200__channel_serial_is_updated_whenever_a_protocol_message_with_either_message_presence_or_attached_actions_is_received_in_a_channel()" time="0.0881049633026123">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__201__channel_serial_is_cleared_whenever_a_channel_entered_into_detached_suspended_or_failed_state()" time="0.09252500534057617">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__202__Channel__attach__protocol_message_channelSerial_must_be_set_to_channelSerial_of_the_most_recent_protocol_message_or_omitted_if_no_previous_protocol_message_received()" time="0.20347893238067627">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test__Channel_options__setOptions__shouldUpdateOptionsOfRestChannel()" time="0.0366969108581543">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test_Channel_should_ignore_protocol_messages_with_Object_and_ObjectSync_actions_when_LiveObjects_plugin_not_provided()" time="0.08404898643493652">
        </testcase>
        <testcase classname="RealtimeClientChannelTests" name="test_channelSerial_isUpdatedByObjectProtocolMessage()" time="0.06681692600250244">
        </testcase>
        <testcase classname="RealtimeClientChannelsTests" name="test__001__Channels__should_exist_methods_to_check_if_a_channel_exists_or_iterate_through_the_existing_channels()" time="0.0030510425567626953">
        </testcase>
        <testcase classname="RealtimeClientChannelsTests" name="test__002__Channels__get__should_create_a_new_Channel_if_none_exists_or_return_the_existing_one()" time="0.006296038627624512">
        </testcase>
        <testcase classname="RealtimeClientChannelsTests" name="test__003__Channels__get__should_be_possible_to_specify_a_ChannelOptions()" time="0.003477931022644043">
        </testcase>
        <testcase classname="RealtimeClientChannelsTests" name="test__004__Channels__get__accessing_an_existing_Channel_with_options_should_update_the_options_and_then_return_the_object()" time="0.014006972312927246">
        </testcase>
        <testcase classname="RealtimeClientChannelsTests" name="test__005__Channels__release__should_release_a_channel()" time="0.5906109809875488">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__001__Connection__should_connect_automatically()" time="0.05472707748413086">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__002__Connection__should_connect_manually()" time="2.0518970489501953">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__003__Connection__API_version_param_must_be_included_in_all_connections()" time="0.006194949150085449">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__004__Connection__Library_and_version_param__agent__should_include_the__Ably_Agent__header_value()" time="0.03725707530975342">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__005__Connection__basic_operations_should_work_simultaneously()" time="1.5514830350875854">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__006__Connection__should_have_an_opened_websocket_connection_and_received_a_CONNECTED_ProtocolMessage()" time="0.31720590591430664">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__007__Connection__should_make_a_new_connection_with_a_new_transport_instance_if_the_state_is_CLOSING()" time="0.08749091625213623">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__008__Connection__it_should_make_sure_that__when_the_CLOSED_ProtocolMessage_arrives_for_the_old_connection__it_doesn_t_affect_the_new_one()" time="0.10299098491668701">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__009__Connection__should_enter_FAILED_state_when_API_key_is_invalid()" time="0.14676499366760254">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__010__Connection__attributes_within_ConnectionDetails_should_be_used_as_defaults()" time="0.035575032234191895">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__011__Connection__should_disconnect_the_transport_when_no_activity_exist()" time="4.780426025390625">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__012__Connection__the_client_may_receive_a_CONNECTED_ProtocolMessage_from_Ably_at_any_point_and_should_emit_an_UPDATE_event()" time="0.5645879507064819">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__013__Connection__should_set_the_Connection_reason_attribute_based_on_the_Error_member_of_the_CONNECTED_ProtocolMessage()" time="0.08124399185180664">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__014__Connection__should_not_move_to_FAILED_if_received_DISCONNECT_with_an_error()" time="0.04453706741333008">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__015__Connection__should_abort_reconnection_with_new_token_if_the_server_has_requested_it_to_authorize_and_after_it_the_connection_has_been_closed()" time="0.12478506565093994">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__016__Connection__ConnectionDetails__maxMessageSize_overrides_the_default_maxMessageSize()" time="0.036438941955566406">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__017__Connection__url__should_connect_to_the_default_host()" time="0.0015829801559448242">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__018__Connection__url__should_connect_with_query_string_params()" time="0.0416949987411499">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__019__Connection__url__should_connect_with_query_string_params_including_clientId()" time="0.20630693435668945">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__020__Connection__event_emitter__should_emit_events_for_state_changes()" time="0.21547293663024902">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__021__Connection__event_emitter__should_never_emit_a_ConnectionState_event_for_a_state_equal_to_the_previous_state()" time="0.06468892097473145">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__021b__Connection__event_emitter__should_never_emit_a_ConnectionState_event_for_a_state_equal_to_the_previous_state_CONNECTING()" time="0.03619503974914551">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__022__Connection__event_emitter__should_emit_states_on_a_new_connection()" time="0.1736510992050171">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__023__Connection__event_emitter__should_emit_states_when_connection_is_closed()" time="0.06825399398803711">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__024__Connection__event_emitter__should_have_the_current_state()" time="0.15696096420288086">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__025__Connection__event_emitter__should_have_a_ConnectionStateChange_as_first_argument_for_every_connection_state_change()" time="0.03518509864807129">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__026__Connection__event_emitter__should_have_the_reason_which_contains_an_ErrorInfo()" time="0.038378000259399414">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__027__Connection__event_emitter__any_state_change_triggered_by_a_ProtocolMessage_that_contains_an_Error_member_should_populate_the_Reason_property()" time="0.18703901767730713">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__028__Connection__ACK_and_NACK__should_expect_either_an_ACK_or_NACK_to_confirm__successful_receipt_and_acceptance_of_message()" time="0.06022202968597412">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__029__Connection__ACK_and_NACK__should_expect_either_an_ACK_or_NACK_to_confirm__successful_receipt_and_acceptance_of_presence()" time="0.050938963890075684">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__030__Connection__ACK_and_NACK__should_expect_either_an_ACK_or_NACK_to_confirm__message_failure()" time="0.2773069143295288">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__031__Connection__ACK_and_NACK__should_expect_either_an_ACK_or_NACK_to_confirm__presence_failure()" time="0.04780006408691406">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__032__Connection__ACK_and_NACK__ProtocolMessage__should_contain_unique_serially_incrementing_msgSerial_along_with_the_count()" time="0.5770889520645142">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__033__Connection__ACK_and_NACK__ProtocolMessage__should_continue_incrementing_msgSerial_serially_if_the_connection_resumes_successfully()" time="4.651495933532715">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__034__Connection__ACK_and_NACK__ProtocolMessage__should_reset_msgSerial_serially_if_the_connection_does_not_resume()" time="0.6975769996643066">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__035__Connection__ACK_and_NACK__should_trigger_the_failure_callback_for_the_remaining_pending_messages_if__connection_is_closed()" time="2.1695159673690796">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__036__Connection__ACK_and_NACK__should_trigger_the_failure_callback_for_the_remaining_pending_messages_if__connection_state_enters_FAILED()" time="1.154109001159668">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__038__Connection__connection_id__should_be_null_until_connected()" time="0.03730201721191406">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__039__Connection__connection_id__should_have_unique_IDs()" time="0.2755779027938843">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__040__Connection__connection_key__should_be_null_until_connected()" time="0.36947202682495117">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__041__Connection__connection_key__should_have_unique_connection_keys()" time="0.3628840446472168">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__045__Connection__close__if_CONNECTING__do_the_operation_once_CONNECTED()" time="0.07993698120117188">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__046__Connection__close__if_CONNECTED__should_send_a_CLOSE_action__change_state_to_CLOSING_and_receive_a_CLOSED_action()" time="0.22152400016784668">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__047__Connection__close__should_transition_to_CLOSED_action_when_the_close_process_timeouts()" time="0.06443703174591064">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__048__Connection__close__transitions_to_the_CLOSING_state_and_then_to_the_CLOSED_state_if_the_transport_is_abruptly_closed()" time="0.04051196575164795">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__049__Connection__close__if_DISCONNECTED__aborts_the_retry_and_moves_immediately_to_CLOSED()" time="1.6395119428634644">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__050__Connection__close__if_SUSPENDED__aborts_the_retry_and_moves_immediately_to_CLOSED()" time="1.6330440044403076">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__051__Connection__ping__fails_if_in_the_INITIALIZED__SUSPENDED__CLOSING__CLOSED_or_FAILED_state()" time="0.22951900959014893">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__052__Connection__ping__should_send_a_ProtocolMessage_with_action_HEARTBEAT_and_expects_a_HEARTBEAT_message_in_response()" time="0.03997504711151123">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__053__Connection__ping__should_fail_if_a_HEARTBEAT_ProtocolMessage_is_not_received_within_the_default_realtime_request_timeout()" time="3.195483922958374">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__054__Connection__connection_request_fails__on_DISCONNECTED_after_CONNECTED__should_not_emit_error_with_a_renewable_token()" time="2.1476210355758667">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__055__Connection__connection_request_fails__on_token_error_while_CONNECTING__reissues_token_and_reconnects()" time="4.427263975143433">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__056__Connection__connection_request_fails__should_transition_to_disconnected_when_the_token_renewal_fails()" time="2.0656509399414062">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__057__Connection__connection_request_fails__should_transition_to_Failed_state_because_the_token_is_invalid_and_not_renewable()" time="3.2736560106277466">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__058__Connection__connection_request_fails__connection_attempt_should_fail_if_not_connected_within_the_default_realtime_request_timeout()" time="0.5332978963851929">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__059__Connection__connection_request_fails__connection_attempt_fails_for_any_recoverable_reason__for_example_a_timeout()" time="13.962576031684875">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__059b__Connection__connection_request_fails__connection_attempt_fails_for_any_recoverable_reason__for_example_an_hostUnreachable_transport_error()" time="19.371875047683716">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__060__Connection__connection_request_fails__connection_state_has_been_in_the_DISCONNECTED_state_for_more_than_the_default_connectionStateTtl_should_change_the_state_to_SUSPENDED()" time="1.094191074371338">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__061__Connection__connection_request_fails__should_change_the_state_to_SUSPENDED_when_the_connection_state_has_been_in_the_DISCONNECTED_state_for_more_than_the_connectionStateTtl()" time="12.718325018882751">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__062__Connection__connection_request_fails__on_CLOSE_the_connection_should_stop_connection_retries()" time="3.764088988304138">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__064__Connection__connection_failures_once_CONNECTED__if_a_Connection_transport_is_disconnected_unexpectedly_or_if_a_token_expires__then_the_Connection_manager_will_immediately_attempt_to_reconnect()" time="1.2352240085601807">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__065__Connection__connection_failures_once_CONNECTED__should_recover_from_disconnection_and_messages_should_be_delivered_once_the_connection_is_resumed()" time="0.23876798152923584">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__066__Connection__connection_failures_once_CONNECTED__ACK_and_NACK_responses_for_published_messages_can_only_ever_be_received_on_the_transport_connection_on_which_those_messages_were_sent()" time="0.19310295581817627">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__067__Connection__connection_failures_once_CONNECTED__reconnects_to_the_websocket_endpoint_with_additional_querystring_params__resume_is_the_private_connection_key_from_the_most_recent_CONNECTED_ProtocolMessage_received()" time="0.16764497756958008">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__068a__Connection__connection_failures_once_CONNECTED__System_s_response_to_a_resume_request__CONNECTED_ProtocolMessage_with_the_same_connectionId_as_the_current_client__and_no_error()" time="0.1864299774169922">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__068b__Connection__connection_failures_once_CONNECTED__System_s_response_to_a_resume_request__CONNECTED_ProtocolMessage_with_the_same_connectionId_as_the_current_client__and_no_error()" time="0.30865204334259033">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__068c__Connection__connection_failures_once_CONNECTED__System_s_response_to_a_resume_request__CONNECTED_ProtocolMessage_with_the_same_connectionId_as_the_current_client__and_no_error()" time="10.2622389793396">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__069__Connection__connection_failures_once_CONNECTED__System_s_response_to_a_resume_request__CONNECTED_ProtocolMessage_with_the_different_connectionId_than_the_current_client_and_an_non_fatal_error()" time="0.25161194801330566">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__071__Connection__connection_failures_once_CONNECTED__System_s_response_to_a_resume_request__ERROR_ProtocolMessage_indicating_a_fatal_error_in_the_connection()" time="0.1524829864501953">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__072__Connection__connection_failures_once_CONNECTED__System_s_response_to_a_resume_request__should_resume_the_connection_after_an_auth_renewal()" time="4.1836429834365845">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__073__Connection__connection_failures_once_CONNECTED__when_a_connection_is_resumed__the_connection_key_may_change_and_will_be_provided_in_the_first_CONNECTED_ProtocolMessage_connectionDetails()" time="0.19512200355529785">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__074__Connection__connection_failures_once_CONNECTED__when_connection__ttl_plus_idle_interval__period_has_passed_since_last_activity__uses_a_new_connection()" time="5.563644051551819">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__075__Connection__connection_failures_once_CONNECTED__when_connection__ttl_plus_idle_interval__period_has_passed_since_last_activity__reattaches_to_the_same_channels_after_a_new_connection_has_been_established()" time="5.6863789558410645">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__076__Connection__connection_failures_once_CONNECTED__when_connection__ttl_plus_idle_interval__period_has_NOT_passed_since_last_activity__uses_the_same_connection()" time="0.2888469696044922">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__077__Connection__connection_failures_once_CONNECTED__DISCONNECTED_message_contains_a_token_error__if_the_token_is_renewable_then_error_should_not_be_emitted()" time="1.2341989278793335">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__078__Connection__connection_failures_once_CONNECTED__DISCONNECTED_message_contains_a_token_error__and_the_library_does_not_have_a_means_to_renew_the_token__the_connection_will_transition_to_the_FAILED_state()" time="2.0677679777145386">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__079__Connection__connection_failures_once_CONNECTED__DISCONNECTED_message_contains_a_token_error__should_transition_to_disconnected_when_the_token_renewal_fails_and_the_error_should_be_emitted()" time="2.204650044441223">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__080__Connection__Connection_recovery__connection_state_should_recover_explicitly_with_a_recover_key()" time="0.6562060117721558">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__082__Connection__Connection_recovery__when_a_connection_is_successfully_recovered__Connection_id_will_be_identical_to_the_id_of_the_connection_that_was_recovered_and_Connection_key_will_always_be_updated_to_the_ConnectionDetails_connectionKey_provided_in_the_first_CONNECTED_ProtocolMessage()" time="0.08744502067565918">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__085__Connection__Connection_recovery__should_set_internal_message_serial_to_component_in_recovery_key()" time="0.04975104331970215">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__086__Connection__Connection_recovery__library_should_create_channel_with_corresponding_serial_in_given_recovery_key()" time="0.20500099658966064">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__086a__Connection__Host_Fallback__failing_connections_with_custom_endpoint_should_result_in_an_error_immediately()" time="0.11371099948883057">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__086b__Connection__Host_Fallback__failing_connections_with_custom_port_should_result_in_an_error_immediately()" time="0.10751307010650635">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__086c__Connection__Host_Fallback__failing_connections_with_custom_tlsPort_should_result_in_an_error_immediately()" time="0.10362708568572998">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__087__Connection__Host_Fallback__failing_connections_with_custom_endpoint_should_result_in_time_outs()" time="0.10366499423980713">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__089__Connection__Host_Fallback__applies_when_an_array_of_ClientOptions_fallbackHosts_is_provided()" time="1.227868914604187">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__089b__Connection__Host_Fallback__applies_when_deprecated_fallbackHostsUseDefault_option_is_set_to_true()" time="0.3728809356689453">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__090__Connection__Connection_recovery__library_provides_additional_querystring_when_recover_is_provided()" time="0.17413699626922607">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__090__Connection__Host_Fallback__should_not_use_an_alternative_host_when_the_client_receives_a_bad_request()" time="1.0021419525146484">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__091__Connection__Host_Fallback__every_connection_is_first_attempted_to_the_primary_host_realtime_ably_io_prod()" time="0.7126790285110474">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__091__Connection__Host_Fallback__every_connection_is_first_attempted_to_the_primary_host_realtime_ably_io_sandbox()" time="0.6949260234832764">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__092__Connection__Host_Fallback__should_retry_hosts_in_random_order_after_checkin_if_an_internet_connection_is_available_prod()" time="1.2318700551986694">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__092__Connection__Host_Fallback__should_retry_hosts_in_random_order_after_checkin_if_an_internet_connection_is_available_sandbox()" time="1.2071219682693481">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__093__Connection__Host_Fallback__doesn_t_try_fallback_host_if_Internet_connection_check_fails()" time="0.10960507392883301">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__094__Connection__Host_Fallback__should_retry_custom_fallback_hosts_in_random_order_after_checkin_if_an_internet_connection_is_available()" time="1.207340955734253">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__095__Connection__Host_Fallback__won_t_use_fallback_hosts_feature_if_an_empty_array_is_provided()" time="0.10718107223510742">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__096__Connection__Host_Fallback__client_is_connected_to_a_fallback_host_endpoint_should_do_HTTP_requests_to_the_same_data_centre()" time="0.35801899433135986">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__097__Connection__Host_Fallback__should_use_an_alternative_host_when___hostUnreachable()" time="0.364516019821167">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__098__Connection__Host_Fallback__should_use_an_alternative_host_when___requestTimeout()" time="0.6031860113143921">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__099__Connection__Host_Fallback__should_use_an_alternative_host_when___hostInternalError_code__501()" time="0.3563419580459595">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__100__Connection__Host_Fallback__should_move_to_disconnected_when_there_s_no_internet__with_NSPOSIXErrorDomain_with_code_57()" time="0.03377103805541992">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__101__Connection__Host_Fallback__should_move_to_disconnected_when_there_s_no_internet__with_NSPOSIXErrorDomain_with_code_50()" time="0.03742992877960205">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__102__Connection__Host_Fallback__should_move_to_disconnected_when_there_s_no_internet__with_any_kCFErrorDomainCFNetwork()" time="0.036418914794921875">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__103a__Connection__Transport_disconnected_side_effects__should_resend_any_ProtocolMessage_by_processing_connection_wide_pending_messages()" time="0.20075500011444092">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__103b__Connection__Transport_disconnected_side_effects_message_serial_for_pending_message_must_remain_the_same_that_is_awaiting_a_ACK_NACK()" time="0.7430030107498169">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__103c__Connection__Transport_disconnected_side_effects_message_must_be_assigned_a_new_msgSerial_from_the_internal_msgSerial()" time="0.7236500978469849">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__104__Connection__Transport_disconnected_side_effects__should_resend_the_ATTACH_message_if_there_are_any_pending_channels()" time="0.19293296337127686">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__106__Connection__Operating_System_events_for_network_internet_connectivity_changes__should_immediately_attempt_to_connect_if_the_operating_system-indicates_that_the_underlying_internet_connection_is_now_available_when_DISCONNECTED_or_SUSPENDED()" time="0.04342198371887207">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__106_b__Connection__Operating_System_events_for_network_internet_connectivity_changes__should_restart_the_pending_connection_attempt_if_the_operating_system-indicates_that_the_underlying_internet_connection_is_now_available_when_CONNECTING()" time="0.09457790851593018">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__107__Connection__Operating_System_events_for_network_internet_connectivity_changes__Ably_can_request_that_a_connected_client_re_authenticates_by_sending_the_client_an_AUTH_ProtocolMessage()" time="0.16832399368286133">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__108__Connection__Operating_System_events_for_network_internet_connectivity_changes__re_authenticate_and_resume_the_connection_when_the_client_is_forcibly_disconnected_following_a_DISCONNECTED_message_containing_an_error_code_greater_than_or_equal_to_40140_and_less_than_40150()" time="4.1972609758377075">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__109__Connection__Operating_System_events_for_network_internet_connectivity_changes__should_immediately_change_the_state_to_DISCONNECTED_if_the_operating_system-indicates_that_the_underlying_internet_connection_is_no_longer_available__when_CONNECTING()" time="0.002285003662109375">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__110__Connection__Connection_recovery__connection_recovery_key_is_correctly_constructed_from_defined_parts()" time="0.0672370195388794">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__110__Connection__Operating_System_events_for_network_internet_connectivity_changes__should_immediately_change_the_state_to_DISCONNECTED_if_the_operating_system-indicates_that_the_underlying_internet_connection_is_no_longer_available__when_CONNECTED()" time="0.04057192802429199">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__111__Connection__Connection_recovery__connection_recovery_key_is_properly_serializing_any_unicode_channel_name()" time="0.06448698043823242">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__111__Connection__with_fixture_messages__should_encode_and_decode_fixture_messages_as_expected()" time="5.441699028015137">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__112__Connection__Connection_recovery__connection_recovery_key_is_null_when_connection_is_in_invalid_state()" time="0.0838170051574707">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__112__Connection__with_fixture_messages__should_send_messages_through_raw_JSON_POST_and_retrieve_equal_messages_through_MsgPack_and_JSON()" time="0.14349400997161865">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__113__Connection__Connection_recovery__connection_recovery_key_is_null_when_connection_is_in_suspended_state()" time="0.23106300830841064">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__113__Connection__with_fixture_messages__should_send_messages_through_MsgPack_and_JSON_and_retrieve_equal_messages_through_raw_JSON_GET()" time="10.633124947547913">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__114__Connection__Connection_recovery__connection_recovery_key_is_null_when_connection_is_in_failed_state()" time="0.046212077140808105">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__139__Connection__connection_id_and_key__should_be_nil_when_sdk_is_in_CLOSING_and_CLOSED_states()" time="0.0377659797668457">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__140__Connection__connection_id_and_key__should_be_nil_when_sdk_is_in_SUSPENDED_state()" time="0.030413031578063965">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__141__Connection__connection_id_and_key__should_be_nil_when_sdk_is_in_FAILED_state()" time="0.254410982131958">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__200a__Connection__Connection_recovery__failures_system-response_to_unrecoverable_token_error()" time="0.11814498901367188">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__200b__Connection__Connection_recovery__failures_system-response_to_unrecoverable_token_error()" time="0.2979300022125244">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__200c__Connection__Connection_recovery__failures_system-response_to_unrecoverable_token_error()" time="0.18576204776763916">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__201__Connection__Connection_recovery__failures_once_CONNECTED__System_s_response_to_a_resume_request__CONNECTED_ProtocolMessage_with_the_different_connectionId_than_the_current_client_and_an_non_fatal_error()" time="0.1844639778137207">
        </testcase>
        <testcase classname="RealtimeClientConnectionTests" name="test__202__Connection__Connection_recovery__failures_with_any_other_fatal_error_in_the_connection()" time="0.3374530076980591">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__002__Presence__should_receive_all_250_members()" time="124.827516913414">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__003__Presence__should_be_used_a_PresenceMap_to_maintain_a_list_of_members()" time="49.67785108089447">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__004__Presence__callback_can_be_provided_that_will_be_called_upon_success()" time="0.05853903293609619">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__005__Presence__callback_can_be_provided_that_will_be_called_upon_failure()" time="0.14039206504821777">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__006__Presence__should_also_ensure_that_using_updateClient_has_no_side_effects_on_a_client_that_has_entered_normally_using_Presence_enter()" time="0.5781700611114502">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__007__Presence__should_indicate_an_error_if_the_client_is_identified_and_has_a_valid_clientId_and_the_clientId_argument_does_not_match_the_client_s_clientId()" time="0.12225198745727539">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__008__Presence__Presence_syncComplete_returns_true_if_the_initial_SYNC_operation_has_completed()" time="124.82068598270416">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__010__Presence__ProtocolMessage_bit_flag__when_members_are_present()" time="124.96845507621765">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__011__Presence__realtime_system-reserves_the_right_to_initiate_a_sync_of_the_presence_members_at_any_point_once_a_channel_is_attached__should_do_a_new_sync_whenever_a_SYNC_ProtocolMessage_is_received_with_a_channel_attribute_and_a_new_sync_sequence_identifier_in_the_channelSerial_attribute()" time="0.6762340068817139">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__012__Presence__realtime_system-reserves_the_right_to_initiate_a_sync_of_the_presence_members_at_any_point_once_a_channel_is_attached__when_a_SYNC_is_sent_with_no_channelSerial_attribute_then_the_sync_data_is_entirely_contained_within_that_ProtocolMessage()" time="0.12802600860595703">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__013__Presence__PresenceMap_has_existing_members_when_a_SYNC_is_started__should_ensure_that_members_no_longer_present_on_the_channel_are_removed_from_the_local_PresenceMap_once_the_sync_is_complete()" time="0.6257990598678589">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__014__Presence__PresenceMap_has_existing_members_when_a_SYNC_is_started__should_emit_a_LEAVE_event_for_each_existing_member_if_the_PresenceMap_has_existing_members_when_an_ATTACHED_message_is_received_without_a_HAS_PRESENCE_flag()" time="0.04515993595123291">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__015__Presence__subscribe__with_no_arguments_should_subscribe_a_listener_to_all_presence_messages()" time="1.2217639684677124">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__016__Presence__unsubscribe__with_no_arguments_unsubscribes_the_listener_if_previously_subscribed_with_an_action_specific_subscription()" time="0.0021420717239379883">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__017__Presence__Channel_state_change_side_effects__if_a_channel_enters_the_ATTACHED_state_then_all_queued_presence_messages_will_be_sent_immediately_and_a_presence_SYNC_may_be_initiated()" time="0.13093805313110352">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__018__Presence__Channel_state_change_side_effects__if_the_channel_enters_the_FAILED_state__all_queued_presence_messages_should_fail_immediately()" time="0.005102038383483887">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__019__Presence__Channel_state_change_side_effects__if_the_channel_enters_the_FAILED_state__should_clear_the_PresenceMap_including_local_members_and_does_not_emit_any_presence_events()" time="0.06728601455688477">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__020__Presence__Channel_state_change_side_effects__if_the_channel_enters_the_DETACHED_state__all_queued_presence_messages_should_fail_immediately()" time="0.005591034889221191">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__021__Presence__Channel_state_change_side_effects__if_the_channel_enters_the_DETACHED_state__should_clear_the_PresenceMap_including_local_members_and_does_not_emit_any_presence_events()" time="0.055091023445129395">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__022__Presence__Channel_state_change_side_effects__channel_enters_the_SUSPENDED_state__all_queued_presence_messages_should_fail_immediately()" time="0.0074310302734375">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__023__Presence__Channel_state_change_side_effects__channel_enters_the_SUSPENDED_state__members_map_is_preserved_and_only_members_that_changed_between_ATTACHED_states_should_result_in_presence_events()" time="3.1493730545043945">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__024__Presence__enter__should_enter_the_current_client__optionally_with_the_data_provided()" time="0.10291898250579834">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__025__Presence__unsubscribe__with_a_single_action_argument_unsubscribes_the_provided_listener_to_all_presence_messages_for_that_action()" time="0.0036919116973876953">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__026__Presence__subscribe__should_implicitly_attach_the_channel_if_options_attachOnSubscribe_is_true()" time="0.10333597660064697">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__026b__Presence__subscribe__should_not_implicitly_attach_the_channel_if_options_attachOnSubscribe_is_false()" time="1.014057993888855">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__027__Presence__subscribe__should_result_in_an_error_if_the_channel_is_in_the_FAILED_state_and_options_attachOnSubscribe_is_true()" time="0.009014010429382324">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__027b__Presence__subscribe__should_not_result_in_an_error_if_the_channel_is_in_the_FAILED_state_and_options_attachOnSubscribe_is_false()" time="1.1537659168243408">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__028__Presence__subscribe__should_result_in_an_error_if_the_channel_moves_to_the_FAILED_state()" time="0.2301650047302246">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__029__Presence__subscribe__with_a_single_action_argument()" time="1.1842080354690552">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__030__Presence__enter__optionally_a_callback_can_be_provided_that_is_called_for_success()" time="0.0864260196685791">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__031__Presence__enter__optionally_a_callback_can_be_provided_that_is_called_for_failure()" time="0.11383295059204102">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__032__Presence__enter__entering_without_an_explicit_PresenceMessage_clientId_should_implicitly_use_the_clientId_of_the_current_connection()" time="0.1342310905456543">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__033__Presence__enter__should_result_in_an_error_immediately_if_the_connection_state_is_connected_and_the_client_is_anonymous()" time="0.04411602020263672">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__033__Presence__enter__should_result_in_an_error_immediately_if_the_connection_state_is_connected_and_the_client_is_wildcard()" time="0.0334019660949707">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__034__Presence__enter__should_result_in_an_error_immediately_if_the_channel_is_DETACHED()" time="0.05556201934814453">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__035__Presence__enter__should_result_in_an_error_immediately_if_the_channel_is_FAILED()" time="0.002665996551513672">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__036__Presence__enter__should_result_in_an_error_if_Ably_service_determines_that_the_client_is_unidentified()" time="0.05697500705718994">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__037__Presence__update__should_update_the_data_for_the_present_member_with_a_value()" time="0.1697620153427124">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__038__Presence__update__should_update_the_data_for_the_present_member_with_null()" time="0.07514095306396484">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__039__Presence__update__should_enter_current_client_into_the_channel_if_the_client_was_not_already_entered()" time="0.0507889986038208">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__040__Presence__update__optionally_a_callback_can_be_provided_that_is_called_for_success()" time="0.05503702163696289">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__041__Presence__update__optionally_a_callback_can_be_provided_that_is_called_for_failure()" time="0.003922939300537109">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__042__Presence__update__update_without_an_explicit_PresenceMessage_clientId_should_implicitly_use_the_clientId_of_the_current_connection()" time="0.5533690452575684">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__043__Presence__leave__should_leave_the_current_client_from_the_channel_and_the_data_will_be_updated_with_the_value_provided()" time="0.13888299465179443">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__044__Presence__leave__should_leave_the_current_client_with_no_data()" time="0.1684870719909668">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__045__Presence__PresenceMap__all_incoming_presence_messages_must_be_compared_for_newness_with_the_matching_member_already_in_the_PresenceMap()" time="0.5580489635467529">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__047__Presence__PresenceMap__if_action_of_UPDATE_arrives__it_should_be_added_to_the_presence_map_with_the_action_set_to_PRESENT()" time="0.5606539249420166">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__048__Presence__PresenceMap__if_action_of_PRESENT_arrives__it_should_be_added_to_the_presence_map_with_the_action_set_to_PRESENT()" time="0.1310180425643921">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__049__Presence__PresenceMap__if_a_SYNC_is_not_in_progress__then_when_a_presence_message_with_an_action_of_LEAVE_arrives__that_memberKey_should_be_deleted_from_the_presence_map__if_present()" time="9.63126003742218">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__050__Presence__PresenceMap__if_a_SYNC_is_in_progress__then_when_a_presence_message_with_an_action_of_LEAVE_arrives__it_should_be_stored_in_the_presence_map_with_the_action_set_to_ABSENT()" time="9.628741979598999">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__051__Presence__PresenceMap__any_incoming_presence_message_that_passes_the_newness_check_should_be_emitted_on_the_Presence_object__with_an_event_name_set_to_its_original_action()" time="0.06036102771759033">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__052__Presence__PresenceMap__compare_for_newness__split_the_id_of_both_presence_messages()" time="50.185145020484924">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__053__Presence__PresenceMap__compare_for_newness__presence_message_has_a_connectionId_which_is_not_an_initial_substring_of_its_id__compares_them_by_timestamp_numerically()" time="50.20630097389221">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__054__Presence__PresenceMap__all_presence_messages_from_a_SYNC_must_also_be_compared_for_newness_in_the_same_way_as_they_would_from_a_PRESENCE__discard_members_where_messages_have_arrived_before_the_SYNC()" time="9.654727101325989">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__056__Presence__enter__should_result_in_an_error_if_the_client_does_not_have_required_presence_permission()" time="0.0932168960571289">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__057__Presence__update__should_result_in_an_error_immediately_if_the_client_is_anonymous()" time="0.05043900012969971">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__058__Presence__update__should_result_in_an_error_immediately_if_the_channel_is_DETACHED()" time="0.05391490459442139">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__059__Presence__update__should_result_in_an_error_immediately_if_the_channel_is_FAILED()" time="0.0023679733276367188">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__060__Presence__update__should_result_in_an_error_if_the_client_does_not_have_required_presence_permission()" time="0.08651196956634521">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__061__Presence__update__should_result_in_an_error_if_Ably_service_determines_that_the_client_is_unidentified()" time="0.06324195861816406">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__062__Presence__leave__optionally_a_callback_can_be_provided_that_is_called_for_success()" time="0.571384072303772">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__063__Presence__leave__optionally_a_callback_can_be_provided_that_is_called_for_failure()" time="0.05459403991699219">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__064__Presence__leave__should_raise_an_error_if_client_is_not_present()" time="0.051872968673706055">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__065__Presence__leave__entering_without_an_explicit_PresenceMessage_clientId_should_implicitly_use_the_clientId_of_the_current_connection()" time="0.552298903465271">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__066__Presence__leave__if_the_client_is_not_currently_ENTERED__Ably_will_respond_with_an_ACK_and_the_request_will_succeed()" time="1.5474849939346313">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__067__Presence__enter__implicitly_attaches_the_Channel()" time="0.05311298370361328">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__068__Presence__enter__should_result_in_an_error_if_the_channel_is_in_the_FAILED_state()" time="0.0029990673065185547">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__069__Presence__enter__should_result_in_an_error_if_the_channel_is_in_the_DETACHED_state()" time="0.053517937660217285">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__070__Presence__leave__should_result_in_an_error_immediately_if_the_client_is_anonymous()" time="0.05118703842163086">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__071__Presence__leave__should_result_in_an_error_immediately_if_the_channel_is_DETACHED()" time="0.10567796230316162">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__072__Presence__leave__should_result_in_an_error_immediately_if_the_channel_is_FAILED()" time="0.057585954666137695">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__073__Presence__leave__should_result_in_an_error_if_the_client_does_not_have_required_presence_permission()" time="0.08862805366516113">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__074__Presence__leave__should_result_in_an_error_if_Ably_service_determines_that_the_client_is_unidentified()" time="0.07319200038909912">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__078__Presence__enter__optional_data_can_be_included_when_entering_a_channel()" time="0.17872297763824463">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__079__Presence__enter__should_emit_the_data_attribute_in_the_LEAVE_event_when_data_is_provided_when_entering_but_no_data_is_provided_when_leaving()" time="0.5673019886016846">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__080__Presence__private_and_internal_PresenceMap_containing_only_members_that_match_the_current_connectionId__any_ENTER__PRESENT__UPDATE_or_LEAVE_event_that_matches_the_current_connectionId_should_be_applied_to_this_object()" time="0.0966179370880127">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__081__Presence__private_and_internal_PresenceMap_containing_only_members_that_match_the_current_connectionId__all_members_belonging_to_the_current_connection_are_published_as_a_PresenceMessage_on_the_Channel_by_the_server_irrespective_of_whether_the_client_has_permission_to_subscribe_or_the_Channel_is_configured_to_publish_presence_events()" time="0.09869503974914551">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__084__Presence__enterClient__should_implicitly_attach_the_Channel()" time="0.06497001647949219">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__085__Presence__enterClient__should_result_in_an_error_if_the_channel_is_in_the_FAILED_state()" time="0.004372000694274902">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__086__Presence__enterClient__should_result_in_an_error_if_the_channel_moves_to_the_FAILED_state()" time="0.00630497932434082">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__087__Presence__updateClient__should_implicitly_attach_the_Channel()" time="0.04929208755493164">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__088__Presence__updateClient__should_result_in_an_error_if_the_channel_is_in_the_FAILED_state()" time="0.0029010772705078125">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__089__Presence__updateClient__should_result_in_an_error_if_the_channel_moves_to_the_FAILED_state()" time="0.00303804874420166">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__090__Presence__leaveClient__should_implicitly_attach_the_Channel()" time="0.0507509708404541">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__091__Presence__leaveClient__should_result_in_an_error_if_the_channel_is_in_the_FAILED_state()" time="0.0030220746994018555">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__092__Presence__leaveClient__should_result_in_an_error_if_the_channel_moves_to_the_FAILED_state()" time="0.0032750368118286133">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__093__Presence__Connection_state_conditions__all_presence_messages_are_published_immediately_if_the_connection_is_CONNECTED()" time="0.05791604518890381">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__094__Presence__Connection_state_conditions__all_presence_messages_will_be_queued_and_delivered_as_soon_as_the_connection_state_returns_to_CONNECTED()" time="0.190667986869812">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__095__Presence__Connection_state_conditions__all_presence_messages_will_be_lost_if_queueMessages_has_been_explicitly_set_to_false()" time="0.04422402381896973">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__096__Presence__Connection_state_conditions__should_result_in_an_error_if_the_connection_state_is_INITIALIZED_and_queueMessages_has_been_explicitly_set_to_false()" time="0.0014640092849731445">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__097__Presence__Connection_state_conditions__should_result_in_an_error_if_the_connection_state_is__suspended()" time="0.04530501365661621">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__098__Presence__Connection_state_conditions__should_result_in_an_error_if_the_connection_state_is__closed()" time="0.0484999418258667">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__099__Presence__Connection_state_conditions__should_result_in_an_error_if_the_connection_state_is__failed()" time="0.03925204277038574">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__100__Presence__get__should_return_a_list_of_current_members_on_the_channel()" time="74.73330402374268">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__101__Presence__get__should_implicitly_attach_the_channel()" time="0.1232229471206665">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__102__Presence__get__should_result_in_an_error_if_the_channel_is_in_the_FAILED_state()" time="0.0023779869079589844">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__103__Presence__get__should_result_in_an_error_if_the_channel_moves_to_the_FAILED_state()" time="0.01727592945098877">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__104__Presence__get__should_result_in_an_error_if_the_channel_is_in_the_DETACHED_state()" time="0.04511702060699463">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__105__Presence__get__should_result_in_an_error_if_the_channel_moves_to_the_DETACHED_state()" time="59.65273094177246">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__106__Presence__get__query__waitForSync_should_be_true_by_default()" time="0.004939079284667969">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__107__Presence__get__If_the_Channel_is_in_the_SUSPENDED_state_then__by_default__results_in_an_error()" time="0.017406940460205078">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__108__Presence__get__If_the_Channel_is_in_the_SUSPENDED_state_then__if_waitForSync_is_true__results_in_an_error()" time="0.004577994346618652">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__109__Presence__get__If_the_Channel_is_in_the_SUSPENDED_state_then__if_waitForSync_is_false__returns_the_members_in_the_current_PresenceMap()" time="0.05083799362182617">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__110__Presence__get__Query__set_of_params___waitForSync_is_true__should_wait_until_SYNC_is_complete_before_returning_a_list_of_members()" time="74.7496589422226">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__111__Presence__get__Query__set_of_params___waitForSync_is_false__should_return_immediately_the_known_set_of_presence_members()" time="74.73614001274109">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__112__Presence__get__Query__set_of_params___should_return_members_filtered_by_clientId()" time="0.14087200164794922">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__113__Presence__get__Query__set_of_params___should_return_members_filtered_by_connectionId()" time="50.18155300617218">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__114__Presence__history__should_support_all_the_same_params_as_Rest()" time="0.19273602962493896">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__115__Presence__history__should_return_a_PaginatedResult_page()" time="74.7395910024643">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__116__Presence__enterClient__enters_into_presence_on_a_channel_on_behalf_of_another_clientId()" time="0.1801159381866455">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__117__Presence__enterClient__should_be_present_all_the_registered_members_on_a_presence_channel()" time="0.6057969331741333">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__118__Presence__presence_message_attributes__if_the_presence_message_does_not_contain_an_id__it_should_be_set_to_protocolMsgId_index()" time="0.0342409610748291">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__119__Presence__presence_message_attributes__extras_should_be_populated_from_user_claims_in_JWT()" time="0.199180006980896">
        </testcase>
        <testcase classname="RealtimeClientPresenceTests" name="test__200__Presence__PresenceMap_should_perform_re_entry_whenever_a_channel_moves_into_the_attached_state_and_presence_message_consists_of_enter_action_with_client_id_and_data()" time="0.7073589563369751">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__001__RealtimeClient__All_WebSocket_connections_should_include_the_current_API_version()" time="0.045364975929260254">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__002__RealtimeClient__should_have_access_to_the_underlying_Connection_object()" time="0.005609989166259766">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__003__RealtimeClient__should_provide_access_to_the_underlying_Channels_object()" time="0.00592494010925293">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__004__RealtimeClient__should_use_the_configured_timeouts_specified()" time="6.175286054611206">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__005__RealtimeClient__background_behaviour()" time="0.3071019649505615">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__006__RealtimeClient__should_accept_acks_with_different_order()" time="0.5758500099182129">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__007__RealtimeClient__transport_should_guarantee_the_incoming_message_order()" time="0.06205105781555176">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__008__RealtimeClient__subscriber_should_receive_messages_in_the_same_order_in_which_they_have_been_sent()" time="0.14773893356323242">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__009__RealtimeClient__should_dispatch_in_user_queue_when_removing_an_observer()" time="0.005141019821166992">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__010__RealtimeClient__should_never_register_any_connection_listeners_for_internal_use_with_the_public_EventEmitter()" time="0.03367805480957031">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__011__RealtimeClient__should_never_register_any_message_and_channel_listeners_for_internal_use_with_the_public_EventEmitter()" time="0.09303402900695801">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__012__RealtimeClient__moves_to_DISCONNECTED_on_an_unexpected_normal_WebSocket_close()" time="0.21953904628753662">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__013__RealtimeClient__options__should_support_the_same_options_as_the_Rest_client()" time="0.03062295913696289">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__014__RealtimeClient__options__should_echoMessages_option_be_true_by_default()" time="0.000532984733581543">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__015__RealtimeClient__options__should_autoConnect_option_be_true_by_default()" time="0.0004360675811767578">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__016__RealtimeClient__options__should_attempt_to_recover_the_connection_state_if_recover_string_is_assigned()" time="0.061163902282714844">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__017__RealtimeClient__options__should_modify_the_realtime_endpoint_host_if_realtimeHost_is_assigned()" time="0.017833948135375977">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__018__RealtimeClient__options__should_modify_both_the_REST_and_realtime_endpoint_if_environment_string_is_assigned()" time="0.000992894172668457">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__019__RealtimeClient__options__url_should_contains_transport_params()" time="0.005692005157470703">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__020__RealtimeClient__Auth_object__should_provide_access_to_the_Auth_object()" time="0.002270936965942383">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__021__RealtimeClient__Auth_object__clientId_may_be_populated_when_the_connection_is_established()" time="0.03773093223571777">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__022__RealtimeClient__stats__should_present_an_async_interface()" time="0.06490397453308105">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__023__RealtimeClient__stats__should_accept_all_the_same_params_as_RestClient()" time="0.13251590728759766">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__024__RealtimeClient__time__should_present_an_async_interface()" time="0.03795003890991211">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__025__RealtimeClient__Auth_authorize_should_upgrade_the_connection_with_current_token__in_the_CONNECTED_state_and_auth_authorize_is_called__the_client_must_obtain_a_new_token__send_an_AUTH_ProtocolMessage_with_an_auth_attribute()" time="0.08948004245758057">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__026__RealtimeClient__Auth_authorize_should_upgrade_the_connection_with_current_token__when_the_authentication_token_change_is_successful__then_the_client_should_receive_a_new_CONNECTED_ProtocolMessage()" time="0.09504902362823486">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__027__RealtimeClient__Auth_authorize_should_upgrade_the_connection_with_current_token__performs_an_upgrade_of_capabilities_without_any_loss_of_continuity_or_connectivity_during_the_upgrade_process()" time="0.12466299533843994">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__028__RealtimeClient__Auth_authorize_should_upgrade_the_connection_with_current_token__when_capabilities_are_downgraded__client_should_receive_an_ERROR_ProtocolMessage_with_a_channel_property()" time="0.10696303844451904">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__029__RealtimeClient__Auth_authorize_should_upgrade_the_connection_with_current_token__when_the_authentication_token_change_fails__client_should_receive_an_ERROR_ProtocolMessage_triggering_the_connection_to_transition_to_the_FAILED_state()" time="0.07280099391937256">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__030__RealtimeClient__Auth_authorize_should_upgrade_the_connection_with_current_token__authorize_call_should_complete_with_an_error_if_the_request_fails()" time="0.05543196201324463">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__031__RealtimeClient__Auth_authorize_should_upgrade_the_connection_with_current_token__authorize_call_should_be_indicated_as_completed_with_the_new_token_or_error_only_once_realtime_has_responded_to_the_AUTH_with_either_a_CONNECTED_or_ERROR_respectively()" time="0.08205008506774902">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__032__RealtimeClient__Auth_authorize_should_upgrade_the_connection_with_current_token__when_connection_is_CONNECTING__all_current_connection_attempts_should_be_halted__and_after_obtaining_a_new_token_the_library_should_immediately_initiate_a_connection_attempt_using_the_new_token()" time="0.09447598457336426">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__033__RealtimeClient__Auth_authorize_should_upgrade_the_connection_with_current_token__authorize_call_should_complete_with_the_new_token_once_the_connection_has_moved_to_the_CONNECTED_state()" time="0.07878196239471436">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__034__RealtimeClient__Auth_authorize_should_upgrade_the_connection_with_current_token__authorize_call_should_complete_with_an_error_if_the_connection_moves_to_the_FAILED_state()" time="0.05996811389923096">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__035__RealtimeClient__Auth_authorize_should_upgrade_the_connection_with_current_token__authorize_call_should_complete_with_an_error_if_the_connection_moves_to_the_SUSPENDED_state()" time="0.05560898780822754">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__036__RealtimeClient__Auth_authorize_should_upgrade_the_connection_with_current_token__authorize_call_should_complete_with_an_error_if_the_connection_moves_to_the_CLOSED_state()" time="0.06178605556488037">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__037__RealtimeClient__Auth_authorize_should_upgrade_the_connection_with_current_token__when_the_connection_is_in_the_SUSPENDED_state_when_auth_authorize_is_called__after_obtaining_a_token_the_library_should_move_to_the_CONNECTING_state_and_initiate_a_connection_attempt_using_the_new_token()" time="0.12053704261779785">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__038__RealtimeClient__Auth_authorize_should_upgrade_the_connection_with_current_token__when_the_connection_is_in_the_CLOSED_state_when_auth_authorize_is_called__after_obtaining_a_token_the_library_should_move_to_the_CONNECTING_state_and_initiate_a_connection_attempt_using_the_new_token()" time="0.11882901191711426">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__039__RealtimeClient__Auth_authorize_should_upgrade_the_connection_with_current_token__when_the_connection_is_in_the_DISCONNECTED_state_when_auth_authorize_is_called__after_obtaining_a_token_the_library_should_move_to_the_CONNECTING_state_and_initiate_a_connection_attempt_using_the_new_token()" time="0.11075305938720703">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__040__RealtimeClient__Auth_authorize_should_upgrade_the_connection_with_current_token__when_the_connection_is_in_the_FAILED_state_when_auth_authorize_is_called__after_obtaining_a_token_the_library_should_move_to_the_CONNECTING_state_and_initiate_a_connection_attempt_using_the_new_token()" time="0.1245570182800293">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__041__If_the_total_size_of_message_s__exceeds_the_maxMessageSize__the_client_library_should_reject_the_publish_and_indicate_an_error()" time="0.03955507278442383">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__042__If_the_total_size_of_message_s__exceeds_the_maxMessageSize__the_client_library_should_reject_also_presence_messages__enter_()" time="0.026188969612121582">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__043__If_the_total_size_of_message_s__exceeds_the_maxMessageSize__the_client_library_should_reject_also_presence_messages__leave_()" time="0.027171015739440918">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__044__If_the_total_size_of_message_s__exceeds_the_maxMessageSize__the_client_library_should_reject_also_presence_messages__update_()" time="0.030665993690490723">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__045__If_the_total_size_of_message_s__exceeds_the_maxMessageSize__the_client_library_should_reject_also_presence_messages__updateClient_()" time="0.026436924934387207">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test__046__If_the_total_size_of_message_s__exceeds_the_maxMessageSize__the_client_library_should_reject_also_presence_messages__leaveClient_()" time="0.02752399444580078">
        </testcase>
        <testcase classname="RealtimeClientTests" name="test_clientId()" time="0.054335951805114746">
        </testcase>
        <testcase classname="RestAnnotationsTests" name="test__annotation_data_uses_a_cipher_added_by_setOptions_after_channel_creation()" time="0.1886739730834961">
        </testcase>
        <testcase classname="RestAnnotationsTests" name="test__idempotent_publishing_should_publish_annotation_with_implicit_id_only_once()" time="2.257978916168213">
        </testcase>
        <testcase classname="RestAnnotationsTests" name="test__publish_annotation_exceeding_max_message_size()" time="0.005758047103881836">
        </testcase>
        <testcase classname="RestAnnotationsTests" name="test__publish_delete_and_get_annotations()" time="2.2514050006866455">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__001__publish__should_not_fail_sending_a_message_with_no_clientId_in_the_client_options_and_credentials_that_can_assume_any_clientId()" time="0.16498494148254395">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__002__publish__should_provide_an_optional_argument_that_allows_the_clientId_value_to_be_specified()" time="0.0033190250396728516">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__003__publish__should_provide_an_optional_argument_that_allows_the_extras_value_to_be_specified()" time="0.12112998962402344">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__004__publish__should_include_attributes_supplied_by_the_caller_in_the_encoded_message()" time="0.04474806785583496">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__005__publish__with_name_and_data_arguments__publishes_the_message_and_invokes_callback_with_success()" time="0.12512099742889404">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__006__publish__with_name_only__publishes_the_message_and_invokes_callback_with_success()" time="0.14500010013580322">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__007__publish__with_data_only__publishes_the_message_and_invokes_callback_with_success()" time="0.1346520185470581">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__008__publish__with_neither_name_nor_data__publishes_the_message_and_invokes_callback_with_success()" time="0.12091195583343506">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__009__publish__with_a_Message_object__publishes_the_message_and_invokes_callback_with_success()" time="0.11108601093292236">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__010__publish__with_an_array_of_Message_objects__publishes_the_messages_in_a_single_request_and_invokes_callback_with_success()" time="0.12448990345001221">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__011__publish__Unidentified_clients_using_Basic_Auth__should_publish_message_with_the_provided_clientId()" time="0.1735600233078003">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__012__publish__ClientOptions_clientId__should_include_the_clientId_as_a_querystring_parameter_in_realtime_connection_requests()" time="0.05161309242248535">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__013__publish__ClientOptions_clientId__should_include_an_X_Ably_ClientId_header_with_value_set_to_the_clientId_as_Base64_encoded_string_in_REST_connection_requests()" time="0.0387340784072876">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__014__publish__Message_clientId__publishing_with_no_clientId_when_the_clientId_is_set_to_some_value_in_the_client_options_should_result_in_a_message_received_with_the_clientId_property_set_to_that_value()" time="0.08914899826049805">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__015__publish__Message_clientId__publishing_with_a_clientId_set_to_the_same_value_as_the_clientId_in_the_client_options_should_result_in_a_message_received_with_the_clientId_property_set_to_that_value()" time="0.10165190696716309">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__016__publish__Message_clientId__publishing_with_a_clientId_set_to_a_value_from_an_unidentified_client_should_result_in_a_message_received_with_the_clientId_property_set_to_that_value()" time="0.07089602947235107">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__017__publish__Message_clientId__publishing_with_a_clientId_set_to_a_different_value_from_the_clientId_in_the_client_options_should_result_in_a_message_being_rejected_by_the_server()" time="0.04448497295379639">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__018__publish__If_the_total_size_of_message_s__exceeds_the_maxMessageSize__the_client_library_should_reject_the_publish_and_indicate_an_error()" time="0.010336995124816895">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__019__publish__If_the_total_size_of_message_s__exceeds_the_maxMessageSize__also_when_using_publish_data_clientId_extras()" time="0.004101991653442383">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__020__publish__idempotent_publishing__idempotentRestPublishing_option()" time="0.001376032829284668">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__021__publish__idempotent_publishing__should_not_generate_for_message_with_a_non_empty_id()" time="0.005300998687744141">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__022__publish__idempotent_publishing__should_generate_for_internal_message_that_is_created_in_publish_name_data___method()" time="0.0034590959548950195">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__023__publish__idempotent_publishing__should_not_generate_for_multiple_messages_with_a_non_empty_id()" time="0.0029050111770629883">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__024__publish__idempotent_publishing__should_not_generate_when_idempotentRestPublishing_flag_is_off()" time="0.0016329288482666016">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__025__publish__idempotent_publishing__should_have_only_one_published_message()" time="0.38507401943206787">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__026__publish__idempotent_publishing__should_publish_a_message_with_implicit_Id_only_once()" time="0.1759120225906372">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__027__publish__idempotent_publishing__random_idempotent_publish_id__should_generate_for_one_message_with_empty_id()" time="0.0036580562591552734">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__028__publish__idempotent_publishing__random_idempotent_publish_id__should_generate_for_multiple_messages_with_empty_id()" time="0.026490092277526855">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__029__history__should_return_a_PaginatedResult_page_containing_the_first_page_of_messages()" time="0.04253792762756348">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__030__history__query_arguments__start_and_end_should_filter_messages_between_those_two_times()" time="0.3167850971221924">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__031__history__query_arguments__start_must_be_equal_to_or_less_than_end_and_is_unaffected_by_the_request_direction()" time="0.014500021934509277">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__032__history__query_arguments__direction_backwards_or_forwards()" time="0.12105000019073486">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__033__history__query_arguments__limit_items_result()" time="0.1214209794998169">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__034__history__query_arguments__limit_supports_up_to_1000_items()" time="0.002048015594482422">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__035__presence__get__should_return_presence_fixture_data()" time="1.8267159461975098">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__036__message_encoding__payloads_should_be_binary__strings__or_objects_capable_of_JSON_representation()" time="0.23095905780792236">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__037__message_encoding__encoding_attribute_should_represent_the_encoding_s__applied_in_right_to_left()" time="0.08991599082946777">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__038__message_encoding__json__binary_payload_should_be_encoded_as_Base64_and_represented_as_a_JSON_string()" time="0.04230701923370361">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__039__message_encoding__json__string_payload_should_be_represented_as_a_JSON_string()" time="0.06479299068450928">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__040__message_encoding__json__messages_received_should_be_decoded_based_on_the_encoding_field()" time="0.1866689920425415">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__041__message_encoding__json__json_payload_should_be_stringified_either__as_a_JSON_Array()" time="0.04078197479248047">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__042__message_encoding__json__json_payload_should_be_stringified_either__as_a_JSON_Object()" time="0.056684017181396484">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__043__message_payload_encryption__should_support_AES_encryption__128_CBC_mode()" time="0.1197589635848999">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__044__message_payload_encryption__should_support_AES_encryption__256_CBC_mode()" time="0.13520610332489014">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__045__message_decoding__should_deliver_with_a_binary_payload_when_the_payload_was_successfully_decoded_but_it_could_not_be_decrypted()" time="0.13388299942016602">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__046__message_decoding__should_deliver_with_encoding_attribute_set_indicating_the_residual_encoding_and_error_should_be_emitted()" time="0.2715710401535034">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__047__status__with_subscribers__returns_a_channel_details_object_populated_with_channel_metrics()" time="0.1502690315246582">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__48__channel_name_can_contain_slash_character_which_is_url_encoded_in_the_rest_request_path()" time="0.002992987632751465">
        </testcase>
        <testcase classname="RestClientChannelTests" name="test__49__publish__with_resultCallback__returns_valid_ARTPublishResult_with_message_serials()" time="0.057188987731933594">
        </testcase>
        <testcase classname="RestClientChannelsTests" name="test__001__RestClient__channels__should_return_collection_of_channels()" time="0.003013014793395996">
        </testcase>
        <testcase classname="RestClientChannelsTests" name="test__002__RestClient__channels__should_be_enumerable()" time="0.0029349327087402344">
        </testcase>
        <testcase classname="RestClientChannelsTests" name="test__003__RestClient__channels__get__should_return_a_channel()" time="0.004389047622680664">
        </testcase>
        <testcase classname="RestClientChannelsTests" name="test__004__RestClient__channels__get__should_return_a_channel_with_the_provided_options()" time="0.0016870498657226562">
        </testcase>
        <testcase classname="RestClientChannelsTests" name="test__005__RestClient__channels__get__should_not_replace_the_options_on_an_existing_channel_when_none_are_provided()" time="0.0007799863815307617">
        </testcase>
        <testcase classname="RestClientChannelsTests" name="test__006__RestClient__channels__get__should_replace_the_options_on_an_existing_channel_when_new_ones_are_provided()" time="0.011385083198547363">
        </testcase>
        <testcase classname="RestClientChannelsTests" name="test__007__RestClient__channels__channelExists__should_check_if_a_channel_exists()" time="0.0008120536804199219">
        </testcase>
        <testcase classname="RestClientChannelsTests" name="test__008__RestClient__channels__releaseChannel__should_release_a_channel()" time="0.0015959739685058594">
        </testcase>
        <testcase classname="RestClientPresenceTests" name="test__001__Presence__presence_messages_retrieved_are_decoded_in_the_same_way_that_messages_are_decoded()" time="0.1420079469680786">
        </testcase>
        <testcase classname="RestClientPresenceTests" name="test__002__Presence__get__should_return_a_PaginatedResult_page_containing_the_first_page_of_members()" time="74.722904920578">
        </testcase>
        <testcase classname="RestClientPresenceTests" name="test__003__Presence__get__limit_should_support_up_to_1000_items()" time="0.005972027778625488">
        </testcase>
        <testcase classname="RestClientPresenceTests" name="test__004__Presence__get__clientId_should_filter_members_by_the_provided_clientId()" time="0.14322805404663086">
        </testcase>
        <testcase classname="RestClientPresenceTests" name="test__005__Presence__get__connectionId_should_filter_members_by_the_provided_connectionId()" time="3.6202560663223267">
        </testcase>
        <testcase classname="RestClientPresenceTests" name="test__006__Presence__history__should_return_a_PaginatedResult_page_containing_the_first_page_of_members()" time="74.74348497390747">
        </testcase>
        <testcase classname="RestClientPresenceTests" name="test__007__Presence__history__query_argument__direction_should_change_the_order_of_the_members()" time="4.651785969734192">
        </testcase>
        <testcase classname="RestClientPresenceTests" name="test__008__Presence__history__connectionId_should_filter_members_by_the_provided_connectionId()" time="3.667918086051941">
        </testcase>
        <testcase classname="RestClientPresenceTests" name="test__009__Presence__history__query_argument__limit_supports_up_to_1000_members()" time="0.1314690113067627">
        </testcase>
        <testcase classname="RestClientPresenceTests" name="test__010__Presence__history__query_argument__start_and_end_should_filter_members_between_those_two_times()" time="19.33041501045227">
        </testcase>
        <testcase classname="RestClientPresenceTests" name="test__011__Presence__history__query_argument__start_must_be_equal_to_or_less_than_end_and_is_unaffected_by_the_request_direction()" time="0.004835963249206543">
        </testcase>
        <testcase classname="RestClientStatsTests" name="test__001__RestClient__stats__result__should_match_minute_level_inbound_and_outbound_fixture_data__forwards_()" time="2.272149085998535">
        </testcase>
        <testcase classname="RestClientStatsTests" name="test__002__RestClient__stats__result__should_match_hour_level_inbound_and_outbound_fixture_data__forwards_()" time="1.762916922569275">
        </testcase>
        <testcase classname="RestClientStatsTests" name="test__003__RestClient__stats__result__should_match_day_level_inbound_and_outbound_fixture_data__forwards_()" time="2.347283959388733">
        </testcase>
        <testcase classname="RestClientStatsTests" name="test__004__RestClient__stats__result__should_match_month_level_inbound_and_outbound_fixture_data__forwards_()" time="2.1584949493408203">
        </testcase>
        <testcase classname="RestClientStatsTests" name="test__005__RestClient__stats__result__should_contain_only_one_item_when_limit_is_1__backwards()" time="2.190730929374695">
        </testcase>
        <testcase classname="RestClientStatsTests" name="test__006__RestClient__stats__result__should_contain_only_one_item_when_limit_is_1__forwards()" time="2.38992702960968">
        </testcase>
        <testcase classname="RestClientStatsTests" name="test__007__RestClient__stats__result__should_be_paginated_according_to_the_limit__backwards()" time="2.455828070640564">
        </testcase>
        <testcase classname="RestClientStatsTests" name="test__008__RestClient__stats__result__should_be_paginated_according_to_the_limit__fowards_()" time="2.282663941383362">
        </testcase>
        <testcase classname="RestClientStatsTests" name="test__009__RestClient__stats__query__start__should_return_an_error_when_later_than_end()" time="0.0029200315475463867">
        </testcase>
        <testcase classname="RestClientStatsTests" name="test__010__RestClient__stats__query__direction__should_be_backwards_by_default()" time="0.0005780458450317383">
        </testcase>
        <testcase classname="RestClientStatsTests" name="test__011__RestClient__stats__query__limit__should_have_a_default_value_of_100()" time="0.00048601627349853516">
        </testcase>
        <testcase classname="RestClientStatsTests" name="test__012__RestClient__stats__query__limit__should_return_an_error_when_greater_than_1000()" time="0.004289984703063965">
        </testcase>
        <testcase classname="RestClientStatsTests" name="test__013__RestClient__stats__query__unit__should_default_to_minute()" time="0.0010600090026855469">
        </testcase>
        <testcase classname="RestClientTests" name="test__001__RestClient__All_REST_requests_should_include_the_current_API_version()" time="0.05630302429199219">
        </testcase>
        <testcase classname="RestClientTests" name="test__002__RestClient__should_provide_access_to_the_AuthOptions_object_passed_in_ClientOptions()" time="0.0037299394607543945">
        </testcase>
        <testcase classname="RestClientTests" name="test__003__RestClient__REST_endpoint_host_should_be_configurable_in_the_Client_constructor_with_the_option_restHost()" time="0.03112494945526123">
        </testcase>
        <testcase classname="RestClientTests" name="test__004__RestClient__should_send_requests_over_http_and_https()" time="0.10307490825653076">
        </testcase>
        <testcase classname="RestClientTests" name="test__005__RestClient__should_use_Auth_to_manage_authentication()" time="0.0873030424118042">
        </testcase>
        <testcase classname="RestClientTests" name="test__006__RestClient__should_request_another_token_after_current_one_is_no_longer_valid()" time="1.241886019706726">
        </testcase>
        <testcase classname="RestClientTests" name="test__007__RestClient__should_result_in_an_error_when_user_does_not_have_sufficient_permissions()" time="0.09304797649383545">
        </testcase>
        <testcase classname="RestClientTests" name="test__008__RestClient__should_use_MsgPack_binary_protocol()" time="0.122109055519104">
        </testcase>
        <testcase classname="RestClientTests" name="test__009__RestClient__should_use_JSON_text_protocol()" time="0.11502909660339355">
        </testcase>
        <testcase classname="RestClientTests" name="test__010__RestClient__X_Ably_Version_must_be_included_in_all_REST_requests()" time="0.04795801639556885">
        </testcase>
        <testcase classname="RestClientTests" name="test__011__RestClient__The_Agent_library_identifier_is_composed_of_a_series_of_key__value__entries_joined_by_spaces()" time="0.045825958251953125">
        </testcase>
        <testcase classname="RestClientTests" name="test__012__RestClient__should_indicate_an_error_if_there_is_no_way_to_renew_the_token()" time="2.2439639568328857">
        </testcase>
        <testcase classname="RestClientTests" name="test__013__RestClient__background_behaviour()" time="0.46792900562286377">
        </testcase>
        <testcase classname="RestClientTests" name="test__014__RestClient__client_should_handle_error_messages_in_plaintext_and_HTML_format()" time="0.1350489854812622">
        </testcase>
        <testcase classname="RestClientTests" name="test__015__RestClient__initializer__should_accept_an_API_key()" time="0.002474069595336914">
        </testcase>
        <testcase classname="RestClientTests" name="test__016__RestClient__initializer__should_throw_when_provided_an_invalid_key()" time="0.006884932518005371">
        </testcase>
        <testcase classname="RestClientTests" name="test__017__RestClient__initializer__should_result_in_error_status_when_provided_a_bad_key()" time="0.055397987365722656">
        </testcase>
        <testcase classname="RestClientTests" name="test__018__RestClient__initializer__should_accept_a_token()" time="0.03857100009918213">
        </testcase>
        <testcase classname="RestClientTests" name="test__019__RestClient__initializer__should_accept_an_options_object()" time="0.002848982810974121">
        </testcase>
        <testcase classname="RestClientTests" name="test__020__RestClient__initializer__should_accept_an_options_object_with_token_authentication()" time="0.060865044593811035">
        </testcase>
        <testcase classname="RestClientTests" name="test__021__RestClient__initializer__should_result_in_error_status_when_provided_a_bad_token()" time="0.043573975563049316">
        </testcase>
        <testcase classname="RestClientTests" name="test__022__RestClient__logging__should_output_to_the_system-log_and_the_log_level_should_be_Warn()" time="0.0031900405883789062">
        </testcase>
        <testcase classname="RestClientTests" name="test__023__RestClient__logging__should_have_a_mutable_log_level()" time="0.0029779672622680664">
        </testcase>
        <testcase classname="RestClientTests" name="test__024__RestClient__logging__should_accept_a_custom_logger()" time="0.007436990737915039">
        </testcase>
        <testcase classname="RestClientTests" name="test__025__RestClient__endpoint__should_accept_a_custom_host_and_send_requests_to_the_specified_host()" time="0.01296091079711914">
        </testcase>
        <testcase classname="RestClientTests" name="test__026__RestClient__endpoint__should_ignore_an_environment_when_restHost_is_customized()" time="0.012318015098571777">
        </testcase>
        <testcase classname="RestClientTests" name="test__027__RestClient__endpoint__should_accept_an_environment_when_restHost_is_left_unchanged()" time="0.002216935157775879">
        </testcase>
        <testcase classname="RestClientTests" name="test__028__RestClient__endpoint__should_default_to_https___rest_ably_io()" time="0.020219087600708008">
        </testcase>
        <testcase classname="RestClientTests" name="test__029__RestClient__endpoint__should_connect_over_plain_http____when_tls_is_off()" time="0.0451279878616333">
        </testcase>
        <testcase classname="RestClientTests" name="test__030__RestClient__endpoint__should_not_prepend_the_environment_if_environment_is_configured_as__production_()" time="0.010719060897827148">
        </testcase>
        <testcase classname="RestClientTests" name="test__031__RestClient__should_use_the_the_connection_and_request_timeouts_specified__timeout_for_any_single_HTTP_request_and_response()" time="1.0118370056152344">
        </testcase>
        <testcase classname="RestClientTests" name="test__032__RestClient__should_use_the_the_connection_and_request_timeouts_specified__max_number_of_fallback_hosts()" time="0.0035490989685058594">
        </testcase>
        <testcase classname="RestClientTests" name="test__033__RestClient__should_use_the_the_connection_and_request_timeouts_specified__max_elapsed_time_in_which_fallback_host_retries_for_HTTP_requests_will_be_attempted()" time="0.42274296283721924">
        </testcase>
        <testcase classname="RestClientTests" name="test__034__RestClient__time__should_return_server_time()" time="0.04477405548095703">
        </testcase>
        <testcase classname="RestClientTests" name="test__035__RestClient__Authentication__should_support_basic_authentication_when_an_API_key_is_provided_with_the_key_option()" time="0.04012095928192139">
        </testcase>
        <testcase classname="RestClientTests" name="test__036__RestClient__Authentication__should_error_when_expired_token_and_no_means_to_renew()" time="5.305463075637817">
        </testcase>
        <testcase classname="RestClientTests" name="test__037__RestClient__Authentication__should_renew_the_token_when_it_has_expired()" time="5.135206937789917">
        </testcase>
        <testcase classname="RestClientTests" name="test__038__RestClient__Authentication__basic_authentication_flag__should_be_true_when_initialized_with_a_key()" time="0.0020279884338378906">
        </testcase>
        <testcase classname="RestClientTests" name="test__039__RestClient__Authentication__basic_authentication_flag__should_be_false_when_options__useTokenAuth_is_set()" time="0.0011199712753295898">
        </testcase>
        <testcase classname="RestClientTests" name="test__040__RestClient__Authentication__basic_authentication_flag__should_be_false_when_options__authUrl_is_set()" time="0.0011830329895019531">
        </testcase>
        <testcase classname="RestClientTests" name="test__041__RestClient__Authentication__basic_authentication_flag__should_be_false_when_options__authCallback_is_set()" time="0.0006710290908813477">
        </testcase>
        <testcase classname="RestClientTests" name="test__042__RestClient__Authentication__basic_authentication_flag__should_be_false_when_options__tokenDetails_is_set()" time="0.0006580352783203125">
        </testcase>
        <testcase classname="RestClientTests" name="test__043__RestClient__Authentication__basic_authentication_flag__should_be_false_when_options__token_is_set()" time="0.0008990764617919922">
        </testcase>
        <testcase classname="RestClientTests" name="test__044__RestClient__Authentication__basic_authentication_flag__should_be_false_when_options__key_is_set()" time="0.0008149147033691406">
        </testcase>
        <testcase classname="RestClientTests" name="test__045__RestClient__Host_Fallback__failing_HTTP_requests_with_custom_endpoint_should_result_in_an_error_immediately()" time="0.007546067237854004">
        </testcase>
        <testcase classname="RestClientTests" name="test__046__RestClient__Host_Fallback__applies_when_ClientOptions_fallbackHostsUseDefault_is_true()" time="0.0023040771484375">
        </testcase>
        <testcase classname="RestClientTests" name="test__047__RestClient__Host_Fallback__won_t_apply_fallback_hosts_if_ClientOptions_fallbackHosts_array_is_empty()" time="0.0040340423583984375">
        </testcase>
        <testcase classname="RestClientTests" name="test__048__RestClient__Host_Fallback__won_t_apply_custom_fallback_hosts_if_ClientOptions_fallbackHosts_and_ClientOptions_environment_are_not_set__use_defaults_instead()" time="0.001387953758239746">
        </testcase>
        <testcase classname="RestClientTests" name="test__049__RestClient__Host_Fallback__every_new_HTTP_request_is_first_attempted_to_the_default_primary_host_rest_ably_io()" time="1.1432700157165527">
        </testcase>
        <testcase classname="RestClientTests" name="test__050__RestClient__Host_Fallback__should_not_use_an_alternative_host_when_the_client_receives_an_bad_request()" time="0.0021990537643432617">
        </testcase>
        <testcase classname="RestClientTests" name="test__051__RestClient__Host_Fallback__fallbackHostsUseDefault_option__allows_the_default_fallback_hosts_to_be_used_when__environment__is_not_production()" time="0.004087090492248535">
        </testcase>
        <testcase classname="RestClientTests" name="test__052__RestClient__Host_Fallback__fallbackHostsUseDefault_option__allows_the_default_fallback_hosts_to_be_used_when_a_custom_Realtime_or_REST_host_endpoint_is_being_used()" time="0.0015919208526611328">
        </testcase>
        <testcase classname="RestClientTests" name="test__053__RestClient__Host_Fallback__fallbackHostsUseDefault_option__should_be_inactive_by_default()" time="0.000496983528137207">
        </testcase>
        <testcase classname="RestClientTests" name="test__054__RestClient__Host_Fallback__fallbackHostsUseDefault_option__should_never_accept_to_configure__fallbackHost__and_set__fallbackHostsUseDefault__to__true_()" time="0.0018199682235717773">
        </testcase>
        <testcase classname="RestClientTests" name="test__055__RestClient__Host_Fallback__Fallback_behavior__should_be_applied_when_restHost__port_and_tlsPort_has_not_been_set_to_an_explicit_value()" time="0.001971006393432617">
        </testcase>
        <testcase classname="RestClientTests" name="test__056__RestClient__Host_Fallback__Fallback_behavior__should_NOT_be_applied_when_ClientOptions_restHost_has_been_set()" time="0.006637930870056152">
        </testcase>
        <testcase classname="RestClientTests" name="test__057__RestClient__Host_Fallback__Fallback_behavior__should_NOT_be_applied_when_ClientOptions_port_has_been_set()" time="0.012148022651672363">
        </testcase>
        <testcase classname="RestClientTests" name="test__058__RestClient__Host_Fallback__Fallback_behavior__should_NOT_be_applied_when_ClientOptions_tlsPort_has_been_set()" time="0.002856016159057617">
        </testcase>
        <testcase classname="RestClientTests" name="test__059__RestClient__Host_Fallback__Fallback_behavior__should_be_applied_when_ClientOptions_fallbackHosts_is_provided()" time="0.005971074104309082">
        </testcase>
        <testcase classname="RestClientTests" name="test__060__RestClient__Host_Fallback__Fallback_behavior__should_be_applied_when_ClientOptions_fallbackHosts_is_not_provided_and_deprecated_fallbackHostsUseDefault_is_on()" time="0.0028259754180908203">
        </testcase>
        <testcase classname="RestClientTests" name="test__061__RestClient__Host_Fallback__fallback_hosts_list_and_priorities__should_use_ClientOptions_fallbackHosts_when_list_is_provided()" time="0.0030059814453125">
        </testcase>
        <testcase classname="RestClientTests" name="test__062__RestClient__Host_Fallback__fallback_hosts_list_and_priorities__should_use_environment_fallback_hosts_when_ClientOptions_environment_is_set_to_a_value_other_than__production__and_ClientOptions_fallbackHosts_is_not_set()" time="0.0034780502319335938">
        </testcase>
        <testcase classname="RestClientTests" name="test__063__RestClient__Host_Fallback__fallback_hosts_list_and_priorities__should_NOT_use_environment_fallback_hosts_when_ClientOptions_environment_is_set_to__production_()" time="0.003297090530395508">
        </testcase>
        <testcase classname="RestClientTests" name="test__064__RestClient__Host_Fallback__fallback_hosts_list_and_priorities__should_use_default_fallback_hosts_when_both_ClientOptions_fallbackHosts_and_ClientOptions_environment_are_not_set()" time="0.00453495979309082">
        </testcase>
        <testcase classname="RestClientTests" name="test__065__RestClient__Host_Fallback__retry_hosts_in_random_order__default_fallback_hosts_should_match__a_e__ably_realtime_com()" time="0.012717008590698242">
        </testcase>
        <testcase classname="RestClientTests" name="test__066__RestClient__Host_Fallback__retry_hosts_in_random_order__environment_fallback_hosts_have_the_format__environment___a_e__fallback_ably_realtime_com()" time="0.0022430419921875">
        </testcase>
        <testcase classname="RestClientTests" name="test__067__RestClient__Host_Fallback__retry_hosts_in_random_order__until_httpMaxRetryCount_has_been_reached()" time="0.02581202983856201">
        </testcase>
        <testcase classname="RestClientTests" name="test__068__RestClient__Host_Fallback__retry_hosts_in_random_order__use_custom_fallback_hosts_if_set()" time="0.002620100975036621">
        </testcase>
        <testcase classname="RestClientTests" name="test__069__RestClient__Host_Fallback__retry_hosts_in_random_order__until_all_fallback_hosts_have_been_tried()" time="0.004712939262390137">
        </testcase>
        <testcase classname="RestClientTests" name="test__070__RestClient__Host_Fallback__retry_hosts_in_random_order__until_httpMaxRetryCount_has_been_reached__if_custom_fallback_hosts_are_provided_in_ClientOptions_fallbackHosts__then_they_will_be_used_instead()" time="0.0034689903259277344">
        </testcase>
        <testcase classname="RestClientTests" name="test__071__RestClient__Host_Fallback__retry_hosts_in_random_order__until_all_fallback_hosts_have_been_tried__if_custom_fallback_hosts_are_provided_in_ClientOptions_fallbackHosts__then_they_will_be_used_instead()" time="0.003376007080078125">
        </testcase>
        <testcase classname="RestClientTests" name="test__072__RestClient__Host_Fallback__retry_hosts_in_random_order__all_fallback_requests_headers_should_contain__Host__header_with_fallback_host_address()" time="0.004873037338256836">
        </testcase>
        <testcase classname="RestClientTests" name="test__073__RestClient__Host_Fallback__retry_hosts_in_random_order__if_an_empty_array_of_fallback_hosts_is_provided__then_fallback_host_functionality_is_disabled()" time="0.0035799741744995117">
        </testcase>
        <testcase classname="RestClientTests" name="test__074__RestClient__Host_Fallback__should_use_an_alternative_host_when___hostUnreachable()" time="0.004217028617858887">
        </testcase>
        <testcase classname="RestClientTests" name="test__075__RestClient__Host_Fallback__should_use_an_alternative_host_when___requestTimeout_timeout__0_1_()" time="0.1110069751739502">
        </testcase>
        <testcase classname="RestClientTests" name="test__076__RestClient__Host_Fallback__should_use_an_alternative_host_when___hostInternalError_code__501_()" time="0.005030989646911621">
        </testcase>
        <testcase classname="RestClientTests" name="test__077__RestClient__Host_Fallback__should_store_successful_fallback_host_as_default_host___hostUnreachable()" time="0.01267397403717041">
        </testcase>
        <testcase classname="RestClientTests" name="test__078__RestClient__Host_Fallback__should_store_successful_fallback_host_as_default_host___requestTimeout_timeout__0_1_()" time="0.11379897594451904">
        </testcase>
        <testcase classname="RestClientTests" name="test__079__RestClient__Host_Fallback__should_store_successful_fallback_host_as_default_host___hostInternalError_code__501_()" time="0.002666950225830078">
        </testcase>
        <testcase classname="RestClientTests" name="test__080__RestClient__Host_Fallback__should_store_successful_fallback_host_as_default_host__should_restore_default_primary_host_after_fallbackRetryTimeout_expired___hostUnreachable()" time="1.1373109817504883">
        </testcase>
        <testcase classname="RestClientTests" name="test__081__RestClient__Host_Fallback__should_store_successful_fallback_host_as_default_host__should_restore_default_primary_host_after_fallbackRetryTimeout_expired___requestTimeout_timeout__0_1_()" time="1.2271159887313843">
        </testcase>
        <testcase classname="RestClientTests" name="test__082__RestClient__Host_Fallback__should_store_successful_fallback_host_as_default_host__should_restore_default_primary_host_after_fallbackRetryTimeout_expired___hostInternalError_code__501_()" time="1.1339919567108154">
        </testcase>
        <testcase classname="RestClientTests" name="test__083__RestClient__Host_Fallback__should_store_successful_fallback_host_as_default_host__should_use_another_fallback_host_if_previous_fallback_request_failed_and_store_it_as_default_if_current_fallback_request_succseeded___hostUnreachable()" time="0.010777950286865234">
        </testcase>
        <testcase classname="RestClientTests" name="test__084__RestClient__Host_Fallback__should_store_successful_fallback_host_as_default_host__should_use_another_fallback_host_if_previous_fallback_request_failed_and_store_it_as_default_if_current_fallback_request_succseeded___requestTimeout_timeout__0_1_()" time="0.21350204944610596">
        </testcase>
        <testcase classname="RestClientTests" name="test__085__RestClient__Host_Fallback__should_store_successful_fallback_host_as_default_host__should_use_another_fallback_host_if_previous_fallback_request_failed_and_store_it_as_default_if_current_fallback_request_succseeded___hostInternalError_code__501_()" time="0.0041419267654418945">
        </testcase>
        <testcase classname="RestClientTests" name="test__086__RestClient__request__method_signature_and_arguments__should_add_query_parameters()" time="0.004696011543273926">
        </testcase>
        <testcase classname="RestClientTests" name="test__087__RestClient__request__method_signature_and_arguments__should_add_a_HTTP_body()" time="0.0015959739685058594">
        </testcase>
        <testcase classname="RestClientTests" name="test__088__RestClient__request__method_signature_and_arguments__should_add_a_HTTP_header()" time="0.002400994300842285">
        </testcase>
        <testcase classname="RestClientTests" name="test__089__RestClient__request__method_signature_and_arguments__should_error_if_method_is_invalid()" time="0.0011589527130126953">
        </testcase>
        <testcase classname="RestClientTests" name="test__090__RestClient__request__method_signature_and_arguments__should_error_if_path_is_invalid()" time="0.0007530450820922852">
        </testcase>
        <testcase classname="RestClientTests" name="test__091__RestClient__request__method_signature_and_arguments__should_error_if_body_is_not_a_Dictionary_or_an_Array()" time="0.0027920007705688477">
        </testcase>
        <testcase classname="RestClientTests" name="test__092__RestClient__request__method_signature_and_arguments__should_do_a_request_and_receive_a_valid_response()" time="0.13720405101776123">
        </testcase>
        <testcase classname="RestClientTests" name="test__093__RestClient__request__method_signature_and_arguments__should_handle_response_failures()" time="0.08403301239013672">
        </testcase>
        <testcase classname="RestClientTests" name="test__094__RestClient__if_in_the_course_of_a_REST_request_an_attempt_to_authenticate_using_authUrl_fails_due_to_a_timeout__the_request_should_result_in_an_error_with_code_40170__statusCode_401__and_a_suitable_error_message()" time="3.0615750551223755">
        </testcase>
        <testcase classname="RestClientTests" name="test__095__RestClient__request_IDs__should_add__request_id__query_parameter()" time="0.006168961524963379">
        </testcase>
        <testcase classname="RestClientTests" name="test__096__RestClient__request_IDs__should_remain_the_same_if_a_request_is_retried_to_a_fallback_host()" time="0.03210902214050293">
        </testcase>
        <testcase classname="RestClientTests" name="test__097__RestClient__request_IDs__ErrorInfo_should_have__requestId__property()" time="0.0021740198135375977">
        </testcase>
        <testcase classname="RestPaginatedTests" name="test__001__RestPaginated__should_extract_links_from_the_response()" time="0.0068149566650390625">
        </testcase>
        <testcase classname="RestPaginatedTests" name="test__002__RestPaginated__should_create_next_first_last_request_from_extracted_link_path()" time="0.0011379718780517578">
        </testcase>
        <testcase classname="RetrySequenceTests" name="test_addRetryAttempt()" time="0.002346038818359375">
        </testcase>
        <testcase classname="StatsTests" name="test__001__Stats__all__should_return_a_MessagesTypes_object()" time="0.005012035369873047">
        </testcase>
        <testcase classname="StatsTests" name="test__002__Stats__all__should_return_value_for_message_counts()" time="0.0007491111755371094">
        </testcase>
        <testcase classname="StatsTests" name="test__003__Stats__all__should_return_value_for_all_data_transferred()" time="0.0006489753723144531">
        </testcase>
        <testcase classname="StatsTests" name="test__004__Stats__all__should_return_zero_for_empty_values()" time="0.0007120370864868164">
        </testcase>
        <testcase classname="StatsTests" name="test__005__Stats__persisted__should_return_a_MessagesTypes_object()" time="0.0022890567779541016">
        </testcase>
        <testcase classname="StatsTests" name="test__006__Stats__persisted__should_return_value_for_message_counts()" time="0.0023540258407592773">
        </testcase>
        <testcase classname="StatsTests" name="test__007__Stats__persisted__should_return_value_for_all_data_transferred()" time="0.0016609430313110352">
        </testcase>
        <testcase classname="StatsTests" name="test__008__Stats__persisted__should_return_zero_for_empty_values()" time="0.006579041481018066">
        </testcase>
        <testcase classname="StatsTests" name="test__009__Stats__inbound__should_return_a_MessageTraffic_object()" time="0.006515026092529297">
        </testcase>
        <testcase classname="StatsTests" name="test__010__Stats__inbound__should_return_value_for_realtime_message_counts()" time="0.0006560087203979492">
        </testcase>
        <testcase classname="StatsTests" name="test__011__Stats__inbound__should_return_value_for_all_presence_data()" time="0.003551006317138672">
        </testcase>
        <testcase classname="StatsTests" name="test__012__Stats__outbound__should_return_a_MessageTraffic_object()" time="0.0024470090866088867">
        </testcase>
        <testcase classname="StatsTests" name="test__013__Stats__outbound__should_return_value_for_realtime_message_counts()" time="0.0007060766220092773">
        </testcase>
        <testcase classname="StatsTests" name="test__014__Stats__outbound__should_return_value_for_all_presence_data()" time="0.0006500482559204102">
        </testcase>
        <testcase classname="StatsTests" name="test__015__Stats__connections__should_return_a_ConnectionTypes_object()" time="0.003152012825012207">
        </testcase>
        <testcase classname="StatsTests" name="test__016__Stats__connections__should_return_value_for_tls_opened_counts()" time="0.0005080699920654297">
        </testcase>
        <testcase classname="StatsTests" name="test__017__Stats__connections__should_return_value_for_all_peak_connections()" time="0.001096963882446289">
        </testcase>
        <testcase classname="StatsTests" name="test__018__Stats__connections__should_return_zero_for_empty_values()" time="0.005923032760620117">
        </testcase>
        <testcase classname="StatsTests" name="test__019__Stats__channels__should_return_a_ResourceCount_object()" time="0.002810955047607422">
        </testcase>
        <testcase classname="StatsTests" name="test__020__Stats__channels__should_return_value_for_opened_counts()" time="0.00045800209045410156">
        </testcase>
        <testcase classname="StatsTests" name="test__021__Stats__channels__should_return_value_for_peak_channels()" time="0.00042998790740966797">
        </testcase>
        <testcase classname="StatsTests" name="test__022__Stats__channels__should_return_zero_for_empty_values()" time="0.0006090402603149414">
        </testcase>
        <testcase classname="StatsTests" name="test__023__Stats__apiRequests__should_return_a_RequestCount_object()" time="0.002691984176635742">
        </testcase>
        <testcase classname="StatsTests" name="test__024__Stats__apiRequests__should_return_value_for_succeeded()" time="0.0007059574127197266">
        </testcase>
        <testcase classname="StatsTests" name="test__025__Stats__apiRequests__should_return_value_for_failed()" time="0.001672983169555664">
        </testcase>
        <testcase classname="StatsTests" name="test__026__Stats__tokenRequests__should_return_a_RequestCount_object()" time="0.0014339685440063477">
        </testcase>
        <testcase classname="StatsTests" name="test__027__Stats__tokenRequests__should_return_value_for_succeeded()" time="0.0010489225387573242">
        </testcase>
        <testcase classname="StatsTests" name="test__028__Stats__tokenRequests__should_return_value_for_failed()" time="0.00048601627349853516">
        </testcase>
        <testcase classname="StatsTests" name="test__029__Stats__interval__should_return_a_Date_object_representing_the_start_of_the_interval()" time="0.00908207893371582">
        </testcase>
        <testcase classname="StatsTests" name="test__030__Stats__push__should_return_a_ARTStatsPushCount_object()" time="0.0030289888381958008">
        </testcase>
        <testcase classname="StatsTests" name="test__031__Stats__push__should_return_value_for_messages_count()" time="0.0004900693893432617">
        </testcase>
        <testcase classname="StatsTests" name="test__032__Stats__push__should_return_value_for_invalid_notifications()" time="0.000514984130859375">
        </testcase>
        <testcase classname="StatsTests" name="test__033__Stats__push__should_return_value_for_attempted_notifications()" time="0.00041806697845458984">
        </testcase>
        <testcase classname="StatsTests" name="test__034__Stats__push__should_return_value_for_successful_notifications()" time="0.001248002052307129">
        </testcase>
        <testcase classname="StatsTests" name="test__035__Stats__push__should_return_value_for_failed_notifications()" time="0.0004889965057373047">
        </testcase>
        <testcase classname="StatsTests" name="test__036__Stats__push__should_return_value_for_directPublishes()" time="0.0006139278411865234">
        </testcase>
        <testcase classname="StatsTests" name="test__037__Stats__inProgress__should_return_a_Date_object_representing_the_last_sub_interval_included_in_this_statistic()" time="0.001667022705078125">
        </testcase>
        <testcase classname="StatsTests" name="test__038__Stats__count__should_return_value_for_number_of_lower_level_stats()" time="0.00045096874237060547">
        </testcase>
        <testcase classname="StringifiableTests" name="test__001__Stringifiable__type_conversion__as_string()" time="0.0018669366836547852">
        </testcase>
        <testcase classname="StringifiableTests" name="test__002__Stringifiable__type_conversion__as_bool__true_()" time="0.0016609430313110352">
        </testcase>
        <testcase classname="StringifiableTests" name="test__003__Stringifiable__type_conversion__as_bool__false_()" time="0.0009529590606689453">
        </testcase>
        <testcase classname="StringifiableTests" name="test__004__Stringifiable__type_conversion__as_integer_that_is_not_treated_as_bool__false_()" time="0.002308964729309082">
        </testcase>
        <testcase classname="StringifiableTests" name="test__005__Stringifiable__type_conversion__as_integer_that_is_not_treated_as_bool__true_()" time="0.0015419721603393555">
        </testcase>
        <testcase classname="StringifiableTests" name="test__006__Stringifiable__type_conversion__as_number__Int_()" time="0.001556992530822754">
        </testcase>
        <testcase classname="StringifiableTests" name="test__007__Stringifiable__type_conversion__as_number__Float_1_decimal_digit_()" time="0.0005530118942260742">
        </testcase>
        <testcase classname="StringifiableTests" name="test__008__Stringifiable__type_conversion__as_number__Float_2_decimal_digits_()" time="0.0020569562911987305">
        </testcase>
        <testcase classname="StringifiableTests" name="test__009__Stringifiable__type_conversion__as_number__Float_4_decimal_digits_()" time="0.001434922218322754">
        </testcase>
        <testcase classname="SummaryTypesTests" name="test__ARTSummaryDistinctV1__parses_dictionary_of_summaries()" time="0.0039000511169433594">
        </testcase>
        <testcase classname="SummaryTypesTests" name="test__ARTSummaryFlagV1__parses_from_dictionary()" time="0.001407027244567871">
        </testcase>
        <testcase classname="SummaryTypesTests" name="test__ARTSummaryFlagV1__returns_nil_for_invalid_dictionary()" time="0.0004830360412597656">
        </testcase>
        <testcase classname="SummaryTypesTests" name="test__ARTSummaryFlagV1__with_clipped_property()" time="0.0004609823226928711">
        </testcase>
        <testcase classname="SummaryTypesTests" name="test__ARTSummaryMultipleV1__parses_dictionary_of_summaries()" time="0.023909926414489746">
        </testcase>
        <testcase classname="SummaryTypesTests" name="test__ARTSummaryMultipleV1__returns_nil_for_invalid_values()" time="0.0007311105728149414">
        </testcase>
        <testcase classname="SummaryTypesTests" name="test__ARTSummaryTotalV1__parses_from_dictionary()" time="0.0023230314254760742">
        </testcase>
        <testcase classname="SummaryTypesTests" name="test__ARTSummaryTotalV1__parses_string_number_from_dictionary()" time="0.000982046127319336">
        </testcase>
        <testcase classname="SummaryTypesTests" name="test__ARTSummaryUniqueV1__parses_dictionary_of_summaries()" time="0.0018919706344604492">
        </testcase>
        <testcase classname="SystemTimeProviderTests" name="test_continuousClock_addingDuration()" time="0.5132789611816406">
        </testcase>
        <testcase classname="SystemTimeProviderTests" name="test_continuousClock_isAfter()" time="0.25984907150268555">
        </testcase>
        <testcase classname="SystemTimeProviderTests" name="test_schedule_derefsBlockAfterInvoke()" time="0.001157999038696289">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__001__Utilities__JSON_Encoder__should_decode_a_protocol_message_that_has_an_error_without_a_message()" time="0.0022050142288208008">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__002__Utilities__JSON_Encoder__should_encode_a_protocol_message_that_has_invalid_data()" time="0.003980040550231934">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__003__Utilities__JSON_Encoder__should_decode_data_with_malformed_JSON()" time="0.0016829967498779297">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__004__Utilities__JSON_Encoder__should_decode_data_with_malformed_MsgPack()" time="0.015857934951782227">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__005__Utilities__JSON_Encoder__in_Realtime__should_handle_and_emit_the_invalid_data_error()" time="0.005298972129821777">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__006__Utilities__JSON_Encoder__in_Realtime__should_ignore_invalid_transport_message()" time="0.04985499382019043">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__007__Utilities__JSON_Encoder__in_Rest__should_handle_and_emit_the_invalid_data_error()" time="0.001604914665222168">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__008__Utilities__JSON_Encoder__in_Rest__should_ignore_invalid_response_payload()" time="0.0019370317459106445">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__009__Utilities__EventEmitter__should_emit_events_to_all_relevant_listeners()" time="0.0012520551681518555">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__010__Utilities__EventEmitter__should_only_call_once_listeners_once_for_its_event()" time="0.0009109973907470703">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__011__Utilities__EventEmitter__calling_off_with_a_single_listener_argument__should_stop_receiving_events_when_calling_off_with_a_single_listener_argument()" time="0.0017631053924560547">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__012__Utilities__EventEmitter__calling_off_with_a_single_listener_argument__should_remove_the_timeout()" time="0.31200695037841797">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__013__Utilities__EventEmitter__calling_off_with_listener_and_event_arguments__should_still_receive_events_if_off_doesn_t_match_the_listener_s_criteria()" time="0.000819087028503418">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__014__Utilities__EventEmitter__calling_off_with_listener_and_event_arguments__should_stop_receive_events_if_off_matches_the_listener_s_criteria()" time="0.001242995262145996">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__015__Utilities__EventEmitter__calling_off_with_no_arguments__should_remove_all_listeners()" time="0.0013870000839233398">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__016__Utilities__EventEmitter__calling_off_with_no_arguments__should_allow_listening_again()" time="0.0010960102081298828">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__017__Utilities__EventEmitter__calling_off_with_no_arguments__should_remove_all_timeouts()" time="0.15864300727844238">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__018__Utilities__EventEmitter__the_timed_method__should_not_call_onTimeout_if_the_deadline_isn_t_reached()" time="0.3153630495071411">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__019__Utilities__EventEmitter__the_timed_method__should_call_onTimeout_and_off_the_listener_if_the_deadline_is_reached()" time="0.37056398391723633">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__020__Utilities__EventEmitter__set_of_listeners__should_not_change_over_the_course_of_the_emit()" time="0.0005578994750976562">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__021__Utilities__Logger__should_have_a_history_of_logs()" time="0.0503840446472168">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__022__Utilities__maxMessageSize__calculates_maxMessageSize_of_a_Message_with_name_and_data()" time="0.0014259815216064453">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__023__Utilities__maxMessageSize__calculates_maxMessageSize_of_a_Message_with_name__data_and_extras()" time="0.0011540651321411133">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__024__Utilities__maxMessageSize__calculates_maxMessageSize_of_a_Message_with_name__data__clientId_and_extras()" time="0.0009410381317138672">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__025_Utilities__message_should_populate_serial_timestamp_to_version()" time="0.0017809867858886719">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__026_Utilities__message_should_always_populate_annotations_and_summary_when_decoding()" time="0.002853989601135254">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__027__Utilities__maxMessageSize__measures_unicode_fields_per_documented_accounting()" time="0.000599980354309082">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__027_Utilities__message_received_with_new_version_structure()" time="0.001363992691040039">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__028_Utilities__message_encoding_with_version_and_annotations()" time="0.0006250143051147461">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__Utilities__JSON_Encoder__should_decode_rest_error_response_with_complete_error_info()" time="0.0014170408248901367">
        </testcase>
        <testcase classname="UtilitiesTests" name="test__Utilities__JSON_Encoder__should_decode_rest_error_response_with_only_error_field()" time="0.00494694709777832">
        </testcase>
        <testcase classname="WrapperSDKProxyTests" name="test_addsAgentChannelParam_whenFetchedWithChannelOptions()" time="0.04749906063079834">
        </testcase>
        <testcase classname="WrapperSDKProxyTests" name="test_addsAgentChannelParam_whenFetchedWithNoChannelOptions()" time="0.042358994483947754">
        </testcase>
        <testcase classname="WrapperSDKProxyTests" name="test_doesNotAddAgentParam_whenProxyClientCreatedWithoutAgents()" time="0.0463789701461792">
        </testcase>
        <testcase classname="WrapperSDKProxyTests" name="test_history_addsWrapperSDKAgentToRequest()" time="0.6828000545501709">
        </testcase>
        <testcase classname="WrapperSDKProxyTests" name="test_presenceHistory_addsWrapperSDKAgentToRequest()" time="0.1504000425338745">
        </testcase>
        <testcase classname="WrapperSDKProxyTests" name="test_pushAdmin_addsWrapperSDKAgentToRequests()" time="0.08343303203582764">
        </testcase>
        <testcase classname="WrapperSDKProxyTests" name="test_pushAdmin_channelSubscriptions_addsWrapperSDKAgentToRequests()" time="0.09013998508453369">
        </testcase>
        <testcase classname="WrapperSDKProxyTests" name="test_pushAdmin_deviceRegistrations_addsWrapperSDKAgentToRequests()" time="0.07561802864074707">
        </testcase>
        <testcase classname="WrapperSDKProxyTests" name="test_pushChannel_addsWrapperSDKAgentToRequests()" time="0.0677180290222168">
        </testcase>
        <testcase classname="WrapperSDKProxyTests" name="test_request_addsWrapperSDKAgentToHeader()" time="0.09732699394226074">
        </testcase>
        <testcase classname="WrapperSDKProxyTests" name="test_request_firstAndNext_addWrapperSDKAgentToHeader()" time="0.6887170076370239">
        </testcase>
        <testcase classname="WrapperSDKProxyTests" name="test_sharesChannelMessageSubscriptionsWithUnderlyingChannel()" time="0.06491196155548096">
        </testcase>
        <testcase classname="WrapperSDKProxyTests" name="test_sharesChannelStateSubscriptionsWithUnderlyingChannel()" time="0.08922100067138672">
        </testcase>
        <testcase classname="WrapperSDKProxyTests" name="test_sharesChannelStateWithUnderlyingChannel()" time="0.05432689189910889">
        </testcase>
        <testcase classname="WrapperSDKProxyTests" name="test_sharesConnectionStateWithUnderlyingClient()" time="0.04384195804595947">
        </testcase>
        <testcase classname="WrapperSDKProxyTests" name="test_sharesConnectionSubscriptionsWithUnderlyingRealtimeClient()" time="0.043649911880493164">
        </testcase>
        <testcase classname="WrapperSDKProxyTests" name="test_stats_addsWrapperSDKAgentToRequest()" time="0.08499002456665039">
        </testcase>
        <testcase classname="WrapperSDKProxyTests" name="test_time_addsWrapperSDKAgentToRequest()" time="0.07507908344268799">
        </testcase>
    </testsuite>
    <testsuite name="AblyTestsObjC" tests="11" failures="0" skipped="0" time="0.13449180126190186">
        <properties>
          <property name="Configuration" value="Test Scheme Action"/>
        </properties>
        <testcase classname="ARTArchiveTests" name="test_art_unarchivedObjectOfClass_for_state_machine_states" time="0.05570709705352783">
        </testcase>
        <testcase classname="ARTInternalLogTests" name="test_ARTLogDebug" time="0.0006659030914306641">
        </testcase>
        <testcase classname="ARTInternalLogTests" name="test_ARTLogError" time="0.000538945198059082">
        </testcase>
        <testcase classname="ARTInternalLogTests" name="test_ARTLogInfo" time="0.0006109476089477539">
        </testcase>
        <testcase classname="ARTInternalLogTests" name="test_ARTLogVerbose" time="0.0016930103302001953">
        </testcase>
        <testcase classname="ARTInternalLogTests" name="test_ARTLogWarn" time="0.0006269216537475586">
        </testcase>
        <testcase classname="ARTInternalLogTests" name="test_classMethodLogger" time="0.0005658864974975586">
        </testcase>
        <testcase classname="ARTPubSubDeviceTests" name="test_createClient_returns_a_realtime_client_declaring_the_device_agent" time="0.0012750625610351562">
        </testcase>
        <testcase classname="ARTPubSubDeviceTests" name="test_createClientWithKey_declares_the_device_agent" time="0.009717941284179688">
        </testcase>
        <testcase classname="CryptoTest" name="testEncryptAndDecrypt" time="0.0022430419921875">
        </testcase>
        <testcase classname="ObjcppTest" name="testPrintVersionInfo" time="0.06084704399108887">
        </testcase>
    </testsuite>
    <testsuite name="UTS" tests="374" failures="0" skipped="1" time="911.0">
        <properties>
          <property name="Configuration" value="Test Scheme Action"/>
        </properties>
        <testcase classname="PublishTests" name="test_RSL1d_error_indication_on_publish_failure(useBinaryProtocol:)" time="8.0">
        </testcase>
        <testcase classname="PublishTests" name="test_RSL1d_error_indication_on_publish_failure(useBinaryProtocol:)" time="6.0">
        </testcase>
        <testcase classname="PublishTests" name="test_RSL1n_publish_result_contains_serials(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PublishTests" name="test_RSL1n_publish_result_contains_serials(useBinaryProtocol:)" time="6.0">
        </testcase>
        <testcase classname="PublishTests" name="test_RSL1k5_idempotent_publish_with_client_supplied_ids(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PublishTests" name="test_RSL1k5_idempotent_publish_with_client_supplied_ids(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PublishTests" name="test_RSL1l1_publish_params_with_forceNack(useBinaryProtocol:)" time="0.0">
            <skipped/>
        </testcase>
        <testcase classname="PublishTests" name="test_RSL1m4_clientId_mismatch_rejection(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PublishTests" name="test_RSL1m4_clientId_mismatch_rejection(useBinaryProtocol:)" time="6.0">
        </testcase>
        <testcase classname="InternalLiveMapApiTests" name="setWithDifferentValueTypes()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapApiTests" name="getReturnsResolvedPrimitiveValues()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapApiTests" name="setAppliesLocallyAfterAck()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapApiTests" name="getResolvesObjectIdToLiveObject()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapApiTests" name="removeSendsMapRemoveMessage()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapApiTests" name="setSendsMapSetMessage()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapApiTests" name="entriesYieldsNonTombstonedKeyValuePairs()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapApiTests" name="keysYieldsOnlyKeys()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapApiTests" name="sizeReturnsNonTombstonedEntryCount()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapApiTests" name="setWithLiveMapGeneratesMapCreatePlusMapSet()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapApiTests" name="setWithBytesValueType()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapApiTests" name="setWithInvalidValueTypesIsCompileTimeBlocked()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapApiTests" name="getReturnsNullForNonExistentKey()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapApiTests" name="setWithNestedLiveMapContainingLiveCounter()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapApiTests" name="setWithLiveCounterGeneratesCounterCreatePlusMapSet()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="unsupportedActionDiscarded()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="replaceDataWithCreateOpMergesInitialValue()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="objectDeleteOnZeroValueCounterEmitsUpdate()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="applyAllowedWhenSiteSerialEmpty()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="applyReturnsTrueOnSuccess()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="counterCreateThenIncAccumulates()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="replaceDataWithTombstoneFlagTombstonesCounter()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="replaceDataSetsDataFromObjectState()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="counterCreateNoCountIsNoop()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="replaceDataOnTombstonedCounterIsNoop()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="zeroValueCounter()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="counterCreateMergesInitialCount()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="applyRejectsEqualSerial()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="counterIncAccumulates()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="counterIncMissingNumberIsNoop()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="counterIncNegative()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="diffCalculation()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="applyWarnsOnEmptySerialOrSiteCode()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="zeroDeltaDiffIsNoop()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="objectDeleteTombstonesCounter()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="localSourceDoesNotUpdateSiteTimeserials()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="tombstonedAtFromLocalClockWhenNoSerialTimestamp()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="counterIncBasic()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="tombstonedAtFromSerialTimestamp()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="counterCreateNoopWhenAlreadyMerged()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="applyRejectsStaleSerial()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="replaceDataMissingCountDefaultsToZero()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="liveObjectInitProperties()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="operationsOnTombstonedCounterRejected()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterTests" name="channelSourceUpdatesSiteTimeserials()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapSetOverwriteObjectIdUpdatesParentReferences()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="emptyDiffIsNoop()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="objectDeleteOnAllTombstonedMapStillEmitsNonNoopTombstoneUpdate()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapSetRevivesTombstonedEntry()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="operationsOnTombstonedMapAreRejected()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapClearPreservesEntriesWithNewerSerial()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="objectDeleteTombstonesMap()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapSetReferencingTombstonedObjectIdYieldsNullValue()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapClearRemovesParentReferencesForClearedEntries()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapSetRejectedWhenSerialBelowClearTimeserial()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapClearRejectedWhenClearTimeserialAlreadyGreater()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="replaceDataWithTombstoneFlagTargetingRootIsRejected()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapRemoveRejectedWhenSerialBelowClearTimeserial()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="unsupportedActionIsDiscarded()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="channelSourceUpdatesSiteTimeserials()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="replaceDataWithCreateOpMergesInitialEntries()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapSetWithPrimitiveValueDoesNotAffectParentReferences()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapClearSetsClearTimeserialAndRemovesOlderEntries()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapRemoveEntryWithNonLiveObjectValue()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapCreateNoopWhenAlreadyMerged()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="lwwRejectsEqualSerial()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapCreateMergesEntries()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapRemoveCreatesTombstonedEntryIfNotExists()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="bothSerialsEmptyRejectsOperation()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="missingEntrySerialAllowsOperation()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="replaceDataSetsTombstonedAtOnTombstonedEntries()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="lwwRejectsStaleSerialOnExistingEntry()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="tombstonedEntryCheckIncludesObjectIdReference()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapSetUpdatesExistingEntry()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapRemoveEntryReferencingLiveObjectRemovesParentReference()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapSetCreatesNewEntry()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="objectDeleteTargetingRootIsRejected()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="replaceDataWithoutClearTimeserialResetsToNull()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapSetWithObjectIdCreatesZeroValueObject()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="diffBetweenTwoDataStates()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapRemoveTombstonesExistingEntry()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapSetNewEntryReferencingLiveObjectAddsParentReference()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="zeroValueMapIsEmpty()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="tombstoneMapRemovesParentReferencesForAllEntries()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="mapSetOverwritingLiveObjectWithLiveObjectCallsBothRemoveAndAdd()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="replaceDataSetsDataFromObjectState()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="replaceDataWithTombstoneFlagTombstonesMap()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveMapTests" name="gcRemovesTombstonedEntriesPastGracePeriod()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="addParentReferenceMultipleParentsMultipleKeys()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="getFullPathsForOrphanReturnsEmpty()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="addParentReferenceAddsKeyToExistingEntry()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="rebuildUnreferencedObjectsHaveEmptyParentReferences()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="removeParentReferenceNonexistentParentNoop()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="getFullPathsForDeeplyNestedObject()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="getFullPathsForDirectChildOfRoot()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="rebuildClearsStaleParentReferences()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="removeParentReferenceRemovesKeyLeavesOthers()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="getFullPathsWithDiamondGraph()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="addParentReferenceDifferentParentSeparateEntry()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="removeParentReferenceNonexistentKey()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="initEmptyCounter()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="getFullPathsWithComplexDiamondAndDeepNesting()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="getFullPathsWithSingleParentMultipleKeys()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="addParentReferenceCreatesNewEntry()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="rebuildPopulatesParentReferencesFromMapEntries()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="initEmptyMap()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="removeParentReferenceRemovesEntryWhenSetEmpty()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="getFullPathsForRootReturnsEmptyPath()" time="1.0">
        </testcase>
        <testcase classname="ParentReferencesTests" name="getFullPathsSuppressesCycles()" time="1.0">
        </testcase>
        <testcase classname="ObjectsSyncTests" name="test_RTO4_RTO5_attach_triggers_sync_get_resolves_after_SYNCED(useBinaryProtocol:)" time="8.0">
        </testcase>
        <testcase classname="ObjectsSyncTests" name="test_RTO4_RTO5_attach_triggers_sync_get_resolves_after_SYNCED(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="ObjectsSyncTests" name="test_RTO5_RTO17_two_clients_sync_same_channel_with_pre_existing_data(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="ObjectsSyncTests" name="test_RTO5_RTO17_two_clients_sync_same_channel_with_pre_existing_data(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="ObjectsSyncTests" name="test_RTO17_reattach_resyncs_object_pool(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="ObjectsSyncTests" name="test_RTO17_reattach_resyncs_object_pool(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="ObjectsSyncTests" name="test_RTO4_attach_without_OBJECT_PUBLISH_still_resolves_get_with_empty_pool(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="ObjectsSyncTests" name="test_RTO4_attach_without_OBJECT_PUBLISH_still_resolves_get_with_empty_pool(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="InternalLiveCounterApiTests" name="incrementWithNonNumberThrows()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterApiTests" name="incrementInvalidAmountsTable()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterApiTests" name="decrementNegatesAmount()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterApiTests" name="counterUpdateEmittedOnIncrement()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterApiTests" name="incrementSendsCounterIncMessage()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterApiTests" name="incrementAppliesLocallyAfterAck()" time="1.0">
        </testcase>
        <testcase classname="InternalLiveCounterApiTests" name="valueReturnsCurrentCounterData()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="subscriptionEventContainsPublicMessage()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="entriesYieldsKeyInstancePairs()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="decrementDelegatesToCounter()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="valueReturnsCounterNumberOrPrimitive()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="setDelegatesToMap()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="removeDelegatesToMap()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="incrementDelegatesToCounter()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="incrementOnNonCounterThrows()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="subscribeHasNoSideEffects()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="setOnNonMapThrows()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="getWrapsEntryValueInInstance()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="subscriptionFollowsIdentityNotPath()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="subscribeReturnsSubscriptionForDeregistration()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="idReturnsObjectId()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="decrementDefaultsToOne()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="compactRecursivelyCompacts()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="subscribeReceivesEvents()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="subscribeOnPrimitiveThrows()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="sizeReturnsNonTombstonedCount()" time="1.0">
        </testcase>
        <testcase classname="InstanceTests" name="incrementDefaultsToOne()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="getRequiresSubscribeMode()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="channelModeEnforcement()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="gcRemovesTombstonedObjectsPastGracePeriod()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="getFailsWhenChannelDetachedDuringSyncWait()" time="2.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="gcGracePeriodFromConnectionDetails()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="accessRequiresSubscribeMode()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="writeThrowsOnFailedChannel()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="writeThrowsWhenEchoMessagesDisabled()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="syncStateEvents()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="writeThrowsOnDetachedChannel()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="channelStateDataLifecycle()" time="2.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="echoDeduplicationViaAppliedOnAckSerials()" time="2.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="getImplicitlyAttachesChannel()" time="2.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="ackAfterEchoDoesNotDoubleApply()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="publishAndApplyAppliesLocallyOnAck()" time="2.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="publishAndApplyFailsWhenChannelFailedDuringSyncWait()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="getFailsWithCauseWhenChannelFailedDuringSyncWait()" time="2.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="writeRequiresPublishMode()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="duplicateListenerRegisteredTwiceFiresTwice()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="accessThrowsOnDetachedChannel()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="gcNeverRemovesRootObject()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="syncEventSequencesForAllTransitions()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="publishAndApplyLogsErrorWhenSiteCodeMissing()" time="2.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="nullSerialInPublishResultIsSkipped()" time="2.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="getReturnsPathObjectWrappingRoot()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="getFailsWhenChannelSuspendedDuringSyncWait()" time="2.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="accessThrowsOnFailedChannel()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="ackSerialsClearedOnResync()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="getWaitsForSynced()" time="2.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="publishSendsObjectProtocolMessage()" time="2.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="emptySyntheticListSkipsSyncWait()" time="2.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="getReattachesDetachedChannel()" time="2.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="subscriptionCoveragePrefixWithDepthConstraint()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="publishAndApplyWaitsForSyncedDuringSyncing()" time="2.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="getResolvesImmediatelyWhenSynced()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="offDeregistersListener()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="getRejectsFailedChannel()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="singleRegisterInstanceSharedAcrossPathObjects()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="applyOnAckDoesNotUpdateSiteTimeserials()" time="2.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="publishAndApplyFailsWhenChannelDetachedDuringSyncWait()" time="1.0">
        </testcase>
        <testcase classname="RealtimeObjectTests" name="subscriptionFiresOnAckApply()" time="2.0">
        </testcase>
        <testcase classname="PathObjectTests" name="instanceReturnsInstanceForLiveObject()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="pathEscapesDotsInSegments()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="sizeReturnsNonTombstonedCount()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="valueReturnsBytesForBinaryEntry()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="compactRecursivelyCompacts()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="resolutionFailsWhenIntermediateNotMap()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="pathResolutionWalksThroughMaps()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="pathReturnsDotDelimitedString()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="valueReturnsNullOnResolutionFailure()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="instanceReturnsInstanceForPrimitive()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="getNonStringKeyIsCompileTimeBlocked()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="readOperationsReturnNullOnResolutionFailure()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="keysReturnsArray()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="valueReturnsCounterValue()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="compactJsonEncodesBytesAsBase64()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="valuesReturnsArrayOfPathObjects()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="valueReturnsPrimitiveValue()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="entriesYieldsKeyPathObjectPairs()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="compactHandlesCyclesViaSharedReference()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="valuesReturnsEmptyForNonMap()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="entriesReturnsEmptyForNonMap()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="sizeReturnsNullForNonMap()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="keysReturnsEmptyForNonMap()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="getAppendsKey()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="valueReturnsNullForLiveMap()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="atParsesDotDelimitedPath()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="compactJsonEncodesCyclesAsObjectId()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="compactReturnsNumberForCounter()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="atRespectsEscapedDots()" time="1.0">
        </testcase>
        <testcase classname="PathObjectTests" name="atNonStringIsCompileTimeBlocked()" time="1.0">
        </testcase>
        <testcase classname="HistoryTests" name="test_RSL2a_history_returns_published_messages(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="HistoryTests" name="test_RSL2a_history_returns_published_messages(useBinaryProtocol:)" time="6.0">
        </testcase>
        <testcase classname="HistoryTests" name="test_RSL2b1_history_direction_forwards(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="HistoryTests" name="test_RSL2b1_history_direction_forwards(useBinaryProtocol:)" time="6.0">
        </testcase>
        <testcase classname="HistoryTests" name="test_RSL2b2_history_limit_parameter(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="HistoryTests" name="test_RSL2b2_history_limit_parameter(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="HistoryTests" name="test_RSL2b3_history_time_range_parameters(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="HistoryTests" name="test_RSL2b3_history_time_range_parameters(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="HistoryTests" name="test_RSL2_history_on_channel_with_no_messages(useBinaryProtocol:)" time="6.0">
        </testcase>
        <testcase classname="HistoryTests" name="test_RSL2_history_on_channel_with_no_messages(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="ValueTypesTests" name="evaluateMapValidatesEntriesType()" time="1.0">
        </testcase>
        <testcase classname="ValueTypesTests" name="evaluateMapWithNoEntriesProducesEmptyEntries()" time="1.0">
        </testcase>
        <testcase classname="ValueTypesTests" name="createMapWithNoEntries()" time="1.0">
        </testcase>
        <testcase classname="ValueTypesTests" name="evaluateCounterValidatesCountType()" time="1.0">
        </testcase>
        <testcase classname="ValueTypesTests" name="evaluateMapValidatesValueTypes()" time="1.0">
        </testcase>
        <testcase classname="ValueTypesTests" name="createCounterDefaultsToZero()" time="1.0">
        </testcase>
        <testcase classname="ValueTypesTests" name="evaluateMapRetainsLocalMapCreate()" time="1.0">
        </testcase>
        <testcase classname="ValueTypesTests" name="evaluateMapEntryValueTypeMapping()" time="1.0">
        </testcase>
        <testcase classname="ValueTypesTests" name="evaluateCounterWithZeroCount()" time="1.0">
        </testcase>
        <testcase classname="ValueTypesTests" name="evaluateCounterGeneratesCounterCreateMessage()" time="1.0">
        </testcase>
        <testcase classname="ValueTypesTests" name="createCounterWithInitialCount()" time="1.0">
        </testcase>
        <testcase classname="ValueTypesTests" name="createMapWithEntries()" time="1.0">
        </testcase>
        <testcase classname="ValueTypesTests" name="evaluateCounterRetainsLocalCounterCreate()" time="1.0">
        </testcase>
        <testcase classname="ValueTypesTests" name="evaluateMapValidatesKeyTypes()" time="1.0">
        </testcase>
        <testcase classname="ValueTypesTests" name="evaluateMapGeneratesMapCreateMessage()" time="1.0">
        </testcase>
        <testcase classname="ValueTypesTests" name="evaluateNestedValueTypesDepthFirst()" time="1.0">
        </testcase>
        <testcase classname="ValueTypesTests" name="createCounterPerformsNoValidation()" time="1.0">
        </testcase>
        <testcase classname="ValueTypesTests" name="evaluateMapAllValueTypesTable()" time="1.0">
        </testcase>
        <testcase classname="ObjectIdTests" name="sha256HashIsBase64URLEncodedNotStandardBase64()" time="1.0">
        </testcase>
        <testcase classname="ObjectIdTests" name="objectIdFormatForCounterType()" time="1.0">
        </testcase>
        <testcase classname="ObjectIdTests" name="differentNonceProducesDifferentObjectId()" time="1.0">
        </testcase>
        <testcase classname="ObjectIdTests" name="objectIdFormatForMapType()" time="1.0">
        </testcase>
        <testcase classname="ObjectIdTests" name="deterministicOutputForSameInputs()" time="1.0">
        </testcase>
        <testcase classname="TimeTests" name="test_RSC16_returns_server_time()" time="1.0">
        </testcase>
        <testcase classname="TimeTests" name="test_RSC16_request_format_get_time()" time="0.0">
        </testcase>
        <testcase classname="TimeTests" name="test_RSC16_no_auth_required()" time="0.0">
        </testcase>
        <testcase classname="TimeTests" name="test_RSC16_works_without_tls()" time="0.0">
        </testcase>
        <testcase classname="TimeTests" name="test_RSC16_error_propagated()" time="0.0">
        </testcase>
        <testcase classname="TokenRequestTests" name="test_RSA9a_RSA9g_createTokenRequest_produces_server_accepted_token()" time="8.0">
        </testcase>
        <testcase classname="TokenRequestTests" name="test_RSA9_createTokenRequest_with_clientId()" time="7.0">
        </testcase>
        <testcase classname="ObjectsGcTests" name="RTO10_tombstoned_object_is_recreatable_with_new_objectId(useBinaryProtocol:)" time="8.0">
        </testcase>
        <testcase classname="ObjectsGcTests" name="RTO10_tombstoned_object_is_recreatable_with_new_objectId(useBinaryProtocol:)" time="8.0">
        </testcase>
        <testcase classname="ObjectsGcTests" name="RTLM19_tombstoned_map_entry_is_re_settable(useBinaryProtocol:)" time="8.0">
        </testcase>
        <testcase classname="ObjectsGcTests" name="RTLM19_tombstoned_map_entry_is_re_settable(useBinaryProtocol:)" time="8.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="multiPathDispatchViaGetFullPaths()" time="1.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="childEventsBubbleUpToParentSubscription()" time="1.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="subscribeReturnsSubscriptionWithUnsubscribe()" time="1.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="subscribeWithDepth2ReceivesSelfAndChildren()" time="2.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="subscribePreconditionDetachedThrows()" time="1.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="candidatePathsIncludeMapKeys()" time="1.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="subscribeEventOmitsMessageWhenNoOperation()" time="1.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="listenerExceptionDoesNotAffectOthers()" time="1.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="subscribeHasNoSideEffects()" time="1.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="subscribeWithDepth1ReceivesSelfOnly()" time="2.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="subscribeEventDeliversObjectMessageForOperations()" time="1.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="subscribeFollowsPathNotIdentity()" time="1.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="mapClearTriggersChildEvents()" time="1.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="prefixMismatchDoesNotTrigger()" time="1.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="subscriptionFiresExactlyOncePerDispatch()" time="2.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="subscribeReturnsSubscriptionAndReceivesEvents()" time="1.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="subscribeNonPositiveDepthThrows()" time="1.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="subscribeNegativeDepthThrows()" time="1.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="subscribeEventProvidesCorrectPathObject()" time="1.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="depthFilteringFormula()" time="2.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="subscribeWithNoDepthReceivesAllDescendants()" time="2.0">
        </testcase>
        <testcase classname="PathObjectSubscribeTests" name="subscribeOnPrimitivePathReceivesChangeEvents()" time="1.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP1_access_presence_from_channel(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP1_access_presence_from_channel(useBinaryProtocol:)" time="6.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP3_get_presence_members_from_fixture_channel(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP3_get_presence_members_from_fixture_channel(useBinaryProtocol:)" time="6.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP3_get_returns_PresenceMessage_with_correct_fields(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP3_get_returns_PresenceMessage_with_correct_fields(useBinaryProtocol:)" time="6.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP3a1_get_with_limit_parameter(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP3a1_get_with_limit_parameter(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP3a2_get_with_clientId_filter(useBinaryProtocol:)" time="6.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP3a2_get_with_clientId_filter(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP3_get_on_channel_with_no_presence(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP3_get_on_channel_with_no_presence(useBinaryProtocol:)" time="6.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP4_history_returns_presence_events(useBinaryProtocol:)" time="8.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP4_history_returns_presence_events(useBinaryProtocol:)" time="8.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP4b1_history_with_start_end_time_range(useBinaryProtocol:)" time="8.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP4b1_history_with_start_end_time_range(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP4b2_history_direction_forwards(useBinaryProtocol:)" time="8.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP4b2_history_direction_forwards(useBinaryProtocol:)" time="8.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP4b3_history_with_limit_and_pagination(useBinaryProtocol:)" time="9.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP4b3_history_with_limit_and_pagination(useBinaryProtocol:)" time="9.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP5_string_data_decoded_correctly(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP5_string_data_decoded_correctly(useBinaryProtocol:)" time="6.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP5_JSON_data_decoded_to_object(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP5_JSON_data_decoded_to_object(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP5_encrypted_data_decoded_with_cipher(useBinaryProtocol:)" time="6.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP5_encrypted_data_decoded_with_cipher(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP5_history_messages_also_decoded(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP5_history_messages_also_decoded(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP3_full_pagination_through_presence_members(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP3_full_pagination_through_presence_members(useBinaryProtocol:)" time="6.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP3_invalid_credentials_rejected(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP3_invalid_credentials_rejected(useBinaryProtocol:)" time="6.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP3_subscribe_capability_sufficient(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="PresenceTests" name="test_RSP3_subscribe_capability_sufficient(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="ConnectionRecoveryTests" name="test_RTN16g_createRecoveryKey_returns_connectionKey_msgSerial_and_channelSerials()" time="1.0">
        </testcase>
        <testcase classname="ConnectionRecoveryTests" name="test_RTN16g2_createRecoveryKey_returns_null_in_inactive_states()" time="0.0">
        </testcase>
        <testcase classname="ConnectionRecoveryTests" name="test_RTN16k_recover_option_adds_recover_query_param_to_WebSocket_URL()" time="0.0">
        </testcase>
        <testcase classname="ConnectionRecoveryTests" name="test_RTN16f_recover_option_initializes_msgSerial_from_recoveryKey()" time="0.0">
        </testcase>
        <testcase classname="ConnectionRecoveryTests" name="test_RTN16f1_malformed_recoveryKey_logs_error_and_connects_normally()" time="0.0">
        </testcase>
        <testcase classname="ConnectionRecoveryTests" name="test_RTN16j_recover_option_instantiates_channels_from_recoveryKey()" time="0.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="newObjectSyncSequenceDoesNotClearBuffer()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="syncCompletionRemovesObjectsNotInSync()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="attachedDuringSyncingResetsSync()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="objectSyncWithNoChannelSerialIsSingleMessageSync()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="emptySyncLeavesRootWithEmptyParentReferences()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="syncWithClearTimeserialHidesInitialCreateOpEntries()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="objectSyncWithNullObjectFieldIsSkipped()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="nullOperationIsDiscardedWithWarning()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="unsupportedActionIsDiscardedWithWarning()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="partialCounterStateLogsError()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="objectSyncWithUnsupportedObjectTypeIsSkipped()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="syncCompletionRebuildsParentReferences()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="objectSyncCompleteSequence()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="objectSyncTransitionsToSyncing()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="attachedClearsBufferedOperations()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="newSyncSequenceDiscardsPrevious()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="objectMessagesBufferedDuringSyncing()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="syncCompletionClearsAppliedOnAckSerials()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="objectMessagesBufferedEvenWithoutPrecedingAttached()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="partialObjectStateMergeForMaps()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="attachedWithHasObjectsFlagStartsSyncing()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="malformedChannelSerialTreatedAsAbsent()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="syncCompletionEmitsUpdatesForExistingObjects()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="poolInitialisesWithRootInternalLiveMap()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="resyncRebuildsParentReferencesWithNewTreeStructure()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="zeroValueObjectCreationFromObjectIdPrefix()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="attachedWithoutHasObjectsOnEmptyRootEmitsNoUpdate()" time="2.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="appliedOnAckSerialsDeduplication()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="bufferedOperationsAppliedOnSyncCompletion()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="attachedWithoutHasObjectsClearsPoolAndGoesToSynced()" time="1.0">
        </testcase>
        <testcase classname="ObjectsPoolTests" name="localSourceAddsSerialToAppliedOnAckSerials()" time="1.0">
        </testcase>
        <testcase classname="ChannelHistoryTests" name="test_RTL10d_history_contains_messages_published_by_another_client(useBinaryProtocol:)" time="9.0">
        </testcase>
        <testcase classname="ChannelHistoryTests" name="test_RTL10d_history_contains_messages_published_by_another_client(useBinaryProtocol:)" time="8.0">
        </testcase>
        <testcase classname="ObjectsLifecycleTests" name="RTO23_RTPO15_set_primitive_via_PathObject_second_client_reads_it(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="ObjectsLifecycleTests" name="RTO23_RTPO15_set_primitive_via_PathObject_second_client_reads_it(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="ObjectsLifecycleTests" name="RTPO15_set_with_LiveCounter_second_client_reads_counter(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="ObjectsLifecycleTests" name="RTPO15_set_with_LiveCounter_second_client_reads_counter(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="ObjectsLifecycleTests" name="RTPO17_increment_counter_second_client_sees_updated_value(useBinaryProtocol:)" time="8.0">
        </testcase>
        <testcase classname="ObjectsLifecycleTests" name="RTPO17_increment_counter_second_client_sees_updated_value(useBinaryProtocol:)" time="8.0">
        </testcase>
        <testcase classname="ObjectsLifecycleTests" name="RTPO15_set_with_LiveMap_second_client_reads_nested_map(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="ObjectsLifecycleTests" name="RTPO15_set_with_LiveMap_second_client_reads_nested_map(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="ObjectsLifecycleTests" name="RTO23_get_waits_for_sync_and_returns_PathObject(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="ObjectsLifecycleTests" name="RTO23_get_waits_for_sync_and_returns_PathObject(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="ObjectsLifecycleTests" name="RTPO15_client_syncs_pre_existing_data_provisioned_via_REST(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="ObjectsLifecycleTests" name="RTPO15_client_syncs_pre_existing_data_provisioned_via_REST(useBinaryProtocol:)" time="7.0">
        </testcase>
        <testcase classname="LiveObjectSubscribeTests" name="updateCarriesSourceObjectMessage()" time="1.0">
        </testcase>
        <testcase classname="LiveObjectSubscribeTests" name="tombstoneUpdateIdentifiedByObjectDeleteAction()" time="1.0">
        </testcase>
        <testcase classname="LiveObjectSubscribeTests" name="subscribeOnMapReceivesUpdate()" time="1.0">
        </testcase>
        <testcase classname="LiveObjectSubscribeTests" name="subscriptionUnsubscribeStopsDelivery()" time="1.0">
        </testcase>
        <testcase classname="LiveObjectSubscribeTests" name="subscribeReturnsSubscription()" time="1.0">
        </testcase>
        <testcase classname="LiveObjectSubscribeTests" name="subscriptionUnsubscribeIsIdempotent()" time="1.0">
        </testcase>
        <testcase classname="LiveObjectSubscribeTests" name="noopUpdateDoesNotTriggerListener()" time="1.0">
        </testcase>
        <testcase classname="LiveObjectSubscribeTests" name="tombstoneOnZeroValueCounterTearsDown()" time="1.0">
        </testcase>
        <testcase classname="LiveObjectSubscribeTests" name="normalUpdateCarriesNonTombstoneAction()" time="1.0">
        </testcase>
        <testcase classname="LiveObjectSubscribeTests" name="subscribeHasNoSideEffects()" time="1.0">
        </testcase>
        <testcase classname="LiveObjectSubscribeTests" name="subscribeReceivesUpdates()" time="1.0">
        </testcase>
        <testcase classname="LiveObjectSubscribeTests" name="tombstoneDeregistersAllListeners()" time="1.0">
        </testcase>
        <testcase classname="PathObjectMutationsTests" name="incrementDelegatesToCounter()" time="1.0">
        </testcase>
        <testcase classname="PathObjectMutationsTests" name="incrementDefaultsToOne()" time="1.0">
        </testcase>
        <testcase classname="PathObjectMutationsTests" name="setOnNestedPath()" time="1.0">
        </testcase>
        <testcase classname="PathObjectMutationsTests" name="setOnNonMapThrows92007()" time="1.0">
        </testcase>
        <testcase classname="PathObjectMutationsTests" name="decrementDefaultsToOne()" time="1.0">
        </testcase>
        <testcase classname="PathObjectMutationsTests" name="incrementOnNonCounterThrows92007()" time="1.0">
        </testcase>
        <testcase classname="PathObjectMutationsTests" name="setOnUnresolvablePathThrows92005()" time="1.0">
        </testcase>
        <testcase classname="PathObjectMutationsTests" name="removeDelegatesToMapRemove()" time="1.0">
        </testcase>
        <testcase classname="PathObjectMutationsTests" name="decrementOnNonCounterThrows92007()" time="1.0">
        </testcase>
        <testcase classname="PathObjectMutationsTests" name="decrementDelegatesToCounter()" time="1.0">
        </testcase>
        <testcase classname="PathObjectMutationsTests" name="incrementOnUnresolvablePathThrows92005()" time="1.0">
        </testcase>
        <testcase classname="PathObjectMutationsTests" name="removeOnNonMapThrows92007()" time="1.0">
        </testcase>
        <testcase classname="PathObjectMutationsTests" name="setDelegatesToMapSet()" time="1.0">
        </testcase>
        <testcase classname="PublicObjectMessageTests" name="objectDeleteOperationCopiesObjectDeleteOmitsUnrelatedFields()" time="1.0">
        </testcase>
        <testcase classname="PublicObjectMessageTests" name="mapCreateWithMapCreateDirectlyPresent()" time="1.0">
        </testcase>
        <testcase classname="PublicObjectMessageTests" name="constructionWithOptionalFieldsMissing()" time="1.0">
        </testcase>
        <testcase classname="PublicObjectMessageTests" name="mapSetOperationCopiesMapSetOmitsUnrelatedFields()" time="1.0">
        </testcase>
        <testcase classname="PublicObjectMessageTests" name="constructionCopiesAllFieldsFromSourceObjectMessage()" time="1.0">
        </testcase>
        <testcase classname="PublicObjectMessageTests" name="mapRemoveOperationCopiesMapRemoveOmitsUnrelatedFields()" time="1.0">
        </testcase>
        <testcase classname="PublicObjectMessageTests" name="counterCreateResolvedFromCounterCreateWithObjectId()" time="1.0">
        </testcase>
        <testcase classname="PublicObjectMessageTests" name="onlyRelevantOperationFieldIsPresentPerActionType()" time="1.0">
        </testcase>
        <testcase classname="PublicObjectMessageTests" name="mapCreateResolvedFromMapCreateWithObjectId()" time="1.0">
        </testcase>
        <testcase classname="PublicObjectMessageTests" name="channelIsSetFromChannelNameNotFromObjectMessage()" time="1.0">
        </testcase>
        <testcase classname="PublicObjectMessageTests" name="mapClearOperationCopiesMapClearOmitsUnrelatedFields()" time="1.0">
        </testcase>
        <testcase classname="PublicObjectMessageTests" name="createPayloadsOmittedWhenNeitherVariantIsPresent()" time="1.0">
        </testcase>
        <testcase classname="PublicObjectMessageTests" name="counterIncOperationCopiesCounterIncOmitsUnrelatedFields()" time="1.0">
        </testcase>
    </testsuite>
</testsuites>