From cc63ae6644c939b198eabb9fc2cc531d5f7d0df8 Mon Sep 17 00:00:00 2001 From: Michal Michalski Date: Wed, 9 Oct 2019 10:26:10 +0200 Subject: [PATCH] [mediacontroller] SendEvent() js tests fixed + code autoformat. + Executed ./code_format script on mediacontroller source code. + Fixed invalid tests for MediaControllerClientInfo::sendEvent() method. + Fixed minor issues from earlier reviews. + initialized all JsonCallbacks to nullptr in constructors of MediaControllerClient/Server [Verification] tests from test_custom_event.js 100% pass. Signed-off-by: Michal Michalski Change-Id: I9514897908e8221ed6f1c8eb1c1ed0083bad0996 --- src/mediacontroller/js/ut/test_custom_event.js | 49 ++++++++---------------- src/mediacontroller/mediacontroller_api.js | 20 +++++----- src/mediacontroller/mediacontroller_client.cc | 50 +++++++++++++++---------- src/mediacontroller/mediacontroller_client.h | 2 +- src/mediacontroller/mediacontroller_instance.cc | 18 ++++----- src/mediacontroller/mediacontroller_server.cc | 17 ++++++++- src/mediacontroller/mediacontroller_server.h | 20 ++++------ 7 files changed, 88 insertions(+), 88 deletions(-) diff --git a/src/mediacontroller/js/ut/test_custom_event.js b/src/mediacontroller/js/ut/test_custom_event.js index 997267c..eaea418 100644 --- a/src/mediacontroller/js/ut/test_custom_event.js +++ b/src/mediacontroller/js/ut/test_custom_event.js @@ -25,6 +25,10 @@ describe('MediaControllerClientInfo::name', function() { }); describe('MediaControllerClient::setCustomEventListener', function() { + after(function() { + client.unsetCustomEventListener(); + }); + it('should throw TypeMismatchError if argument is not a function', function(done) { try { client.setCustomEventListener('not-a-function'); @@ -42,14 +46,13 @@ describe('MediaControllerClient::setCustomEventListener', function() { function secondListener(serverName, event, data) { done(); } - function callback(r) { + function callback(data, code) { /* ignore */ } client.setCustomEventListener(firstListener); client.setCustomEventListener(secondListener); server.getAllClientsInfo()[0].sendEvent('test', {}, callback); - client.unsetCustomEventListener(); }); }); @@ -64,28 +67,6 @@ describe('MediaControllerClient::unsetCustomEventListener', function() { client.unsetCustomEventListener(); done(); }); - - it('should disable event listener', function(done) { - var eventCounter = 0; - function listener(server, event, data) { - if (eventCounter++ > 0) { - done('Too many events received.'); - } - } - function callback(reply) { - /* ignore */ - } - - var cinfo = server.getAllClientsInfo()[0]; - client.setCustomEventListener(listener); - cinfo.sendEvent('Event1', null, callback); - client.unsetCustomEventListener(); - cinfo.sendEvent('Event2', null, callback); - - setTimeout(function() { - done(); - }, 5000); - }); }); describe('MediaControllerClientInfo::sendEvent', function() { @@ -102,7 +83,7 @@ describe('MediaControllerClientInfo::sendEvent', function() { chai.expect(error.name).to.equal('TypeMismatchError'); } try { - cinfo.sendEvent('TestEvent', 'not-an-object-or-null', function(reply) {}); + cinfo.sendEvent('TestEvent', 'not-an-object-or-null', function(data, code) {}); done(new Error('Expected TypeMismatchError')); } catch (error) { chai.expect(error.name).to.equal('TypeMismatchError'); @@ -112,13 +93,13 @@ describe('MediaControllerClientInfo::sendEvent', function() { it('should trigger client listener', function(done) { function listener(serverName, event, data) { - var currentAppId = tizen.application.getCurrentApplication().appInfo.appId; + var currentAppId = tizen.application.getCurrentApplication().appInfo.id; chai.expect(serverName).to.equal(currentAppId); chai.expect(event).to.equal('TestEvent'); - chai.expect(data).to.equal(null); + chai.expect(data).to.be.null; done(); } - function callback(reply) { + function callback(data, code) { /* ignore */ } client.setCustomEventListener(listener); @@ -130,9 +111,9 @@ describe('MediaControllerClientInfo::sendEvent', function() { return new tizen.mediacontroller.RequestReply(null, 123); } - function callback(reply) { - chai.expect(reply.code).to.equal(123); - chai.expect(reply.data).to.equal(null); + function callback(data, code) { + chai.expect(code).to.equal(123); + chai.expect(data).to.equal(null); done(); } @@ -143,15 +124,15 @@ describe('MediaControllerClientInfo::sendEvent', function() { it('should pass data bundle', function(done) { function listener(server, event, data) { chai.expect(event).to.equal('TestEvent'); - chai.expect(data.get('test')).to.equal('data'); + chai.expect(data.test).to.equal('data'); return new tizen.mediacontroller.RequestReply( { TestReply: 'ReplyData' }, 123 ); } - function callback(reply) { - chai.expect(reply.data.get('TestReply')).to.equal('ReplyData'); + function callback(data, code) { + chai.expect(data.TestReply).to.equal('ReplyData'); done(); } diff --git a/src/mediacontroller/mediacontroller_api.js b/src/mediacontroller/mediacontroller_api.js index 65abb6e..f717157 100755 --- a/src/mediacontroller/mediacontroller_api.js +++ b/src/mediacontroller/mediacontroller_api.js @@ -2841,7 +2841,7 @@ MediaControllerServer.prototype.getAllClientsInfo = function() { var results = native_.getResultObject(nativeResult); if (!type_.isArray(results)) { - throw new WebAPIException(WebAPIException.UNKNOWN_ERR); + throw new WebAPIException(WebAPIException.UNKNOWN_ERR, "Invalid return type."); } var clientsInfo = []; @@ -2876,7 +2876,7 @@ MediaControllerClientInfo.prototype.sendEvent = function(event, data, callback) return; } delete EventReplyListenerManager.listenerIdToRequestId[watchId]; - args.callback(result.resultCode, result.data); + args.callback(result.data, result.code); }; var nativeData = { @@ -2909,7 +2909,7 @@ var EventReceivedCallback = function(msg, listener) { var nativeData = { result: result.data, resultCode: result.code, - serverName: msg.serverName , + serverName: msg.serverName, requestId: msg.requestId }; @@ -2928,26 +2928,26 @@ MediaControllerClient.prototype.setCustomEventListener = function(listener) { ]); var result = native_.callSync('MediaControllerClient_setCustomEventListener', { - listenerId: 'MediaControllerClientEventsListener' + listenerId: '_MediaControllerClientEventsListener' }); if (native_.isFailure(result)) { throw native_.getErrorObject(result); - } else { - native_.addListener('MediaControllerClientEventsListener', function(msg) { - EventReceivedCallback(msg, listener); - }); } + + native_.addListener('_MediaControllerClientEventsListener', function(msg) { + EventReceivedCallback(msg, args.listener); + }); }; MediaControllerClient.prototype.unsetCustomEventListener = function() { var result = native_.callSync('MediaControllerClient_unsetCustomEventListener', { - listenerId: 'MediaControllerClientEventsListener' + listenerId: '_MediaControllerClientEventsListener' }); if (native_.isFailure(result)) { throw native_.getErrorObject(result); } else { - native_.removeListener('MediaControllerClientEventsListener'); + native_.removeListener('_MediaControllerClientEventsListener'); } }; diff --git a/src/mediacontroller/mediacontroller_client.cc b/src/mediacontroller/mediacontroller_client.cc index 66c63d1..6595539 100644 --- a/src/mediacontroller/mediacontroller_client.cc +++ b/src/mediacontroller/mediacontroller_client.cc @@ -38,7 +38,18 @@ using common::tools::ReportSuccess; using common::BundleJsonIterator; MediaControllerClient::MediaControllerClient() - : handle_(nullptr), custom_event_listener_(nullptr), subscribed_servers{} { + : handle_(nullptr), + playback_info_listener_(nullptr), + server_status_listener_(nullptr), + command_reply_callback_(nullptr), + playlist_update_listener_(nullptr), + ability_listener_(nullptr), + subtitles_update_listener_(nullptr), + mode360_update_listener_(nullptr), + display_mode_update_listener_(nullptr), + display_rotation_update_listener_(nullptr), + custom_event_listener_(nullptr), + subscribed_servers{} { ScopeLogger(); } @@ -79,7 +90,7 @@ MediaControllerClient::~MediaControllerClient() { LoggerE("Failed to unset display mode listener"); } - if (nullptr != display_rotation_update_listener && !UnsetDisplayRotationInfoChangeListener()) { + if (nullptr != display_rotation_update_listener_ && !UnsetDisplayRotationInfoChangeListener()) { LoggerE("Failed to unset display rotation listener"); } @@ -114,13 +125,13 @@ PlatformResult MediaControllerClient::Init() { PlatformResult MediaControllerClient::SetCustomEventListener(const JsonCallback& callback) { ScopeLogger(); - if (custom_event_listener_ == nullptr) { - int ret = mc_client_set_custom_event_received_cb(handle_, OnEventReceived, this); - if (MEDIA_CONTROLLER_ERROR_NONE != ret) { - return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Failed to set custom event listener", - ("mc_client_set_custom_event_received_cb() error: %d, message: %s", - ret, get_error_message(ret))); - } + if (nullptr == custom_event_listener_) { + int ret = mc_client_set_custom_event_received_cb(handle_, OnEventReceived, this); + if (MEDIA_CONTROLLER_ERROR_NONE != ret) { + return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Failed to set custom event listener", + ("mc_client_set_custom_event_received_cb() error: %d, message: %s", + ret, get_error_message(ret))); + } } custom_event_listener_ = callback; return PlatformResult(ErrorCode::NO_ERROR); @@ -149,7 +160,7 @@ PlatformResult MediaControllerClient::SendEventReply(const char* server_name, ("bundle_create() returned a nullptr")); } SCOPE_EXIT { - free(data_bundle); + bundle_free(data_bundle); }; PlatformResult result = common::JsonToBundle(data, &data_bundle); @@ -1655,7 +1666,7 @@ PlatformResult MediaControllerClient::SetDisplayRotationInfoChangeListener( const JsonCallback& callback) { ScopeLogger(); - if (nullptr != display_rotation_update_listener) { + if (nullptr != display_rotation_update_listener_) { LoggerD("Native callback already set"); return PlatformResult(ErrorCode::NO_ERROR); } @@ -1667,7 +1678,7 @@ PlatformResult MediaControllerClient::SetDisplayRotationInfoChangeListener( ret, get_error_message(ret))); } - display_rotation_update_listener = callback; + display_rotation_update_listener_ = callback; return PlatformResult(ErrorCode::NO_ERROR); } @@ -1681,7 +1692,7 @@ PlatformResult MediaControllerClient::UnsetDisplayRotationInfoChangeListener() { ("mc_client_unset_display_rotation_updated_cb() error: %d, message: %s", ret, get_error_message(ret))); } - display_rotation_update_listener = nullptr; + display_rotation_update_listener_ = nullptr; return PlatformResult(ErrorCode::NO_ERROR); } @@ -1706,7 +1717,7 @@ void MediaControllerClient::OnDisplayRotationUpdate(const char* server_name, data_o[kDisplayRotation] = picojson::value(display_rotation); data_o[kName] = picojson::value(server_name); - client->display_rotation_update_listener(&data); + client->display_rotation_update_listener_(&data); } void MediaControllerClient::OnEventReceived(const char* server_name, const char* request_id, @@ -1714,6 +1725,11 @@ void MediaControllerClient::OnEventReceived(const char* server_name, const char* ScopeLogger(); auto* client = static_cast(user_data); + if (!client->custom_event_listener_) { + LoggerW("custom_event_listener_ is not set"); + return; + } + auto args = picojson::value(picojson::object()); auto& args_obj = args.get(); @@ -1729,11 +1745,7 @@ void MediaControllerClient::OnEventReceived(const char* server_name, const char* args_obj[kEventData] = data_json; args_obj[kRequestId] = picojson::value(std::string(request_id)); - if (nullptr != client->custom_event_listener_) { - client->custom_event_listener_(&args); - } else { - LoggerW("custom_event_listener_ is not set"); - } + client->custom_event_listener_(&args); } } // namespace mediacontroller diff --git a/src/mediacontroller/mediacontroller_client.h b/src/mediacontroller/mediacontroller_client.h index 5b0aed2..e4b255b 100644 --- a/src/mediacontroller/mediacontroller_client.h +++ b/src/mediacontroller/mediacontroller_client.h @@ -122,7 +122,7 @@ class MediaControllerClient { JsonCallback subtitles_update_listener_; JsonCallback mode360_update_listener_; JsonCallback display_mode_update_listener_; - JsonCallback display_rotation_update_listener; + JsonCallback display_rotation_update_listener_; JsonCallback custom_event_listener_; std::list subscribed_servers; diff --git a/src/mediacontroller/mediacontroller_instance.cc b/src/mediacontroller/mediacontroller_instance.cc index 35839b2..2356c17 100644 --- a/src/mediacontroller/mediacontroller_instance.cc +++ b/src/mediacontroller/mediacontroller_instance.cc @@ -879,7 +879,7 @@ void MediaControllerInstance::MediaControllerServerGetAllClientsInfo(const picoj picojson::object& out) { ScopeLogger(); if (!server_) { - LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out, + LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occurred."), &out, ("Failed: server_")); return; } @@ -898,7 +898,7 @@ void MediaControllerInstance::MediaControllerClientInfoSendEvent(const picojson: picojson::object& out) { ScopeLogger(); if (!server_) { - LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out, + LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occurred."), &out, ("Failed: server_")); return; } @@ -919,11 +919,9 @@ void MediaControllerInstance::MediaControllerClientInfoSendEvent(const picojson: free(request_id); }; - auto& args_obj = args.get(); - PlatformResult result = server_->SendEvent(args_obj.at(kEventName).get().c_str(), - args_obj.at(kEventData), - args_obj.at(kClientName).get().c_str(), - reply_cb, &request_id); + PlatformResult result = server_->SendEvent( + args.get(kEventName).get().c_str(), args.get(kEventData), + args.get(kClientName).get().c_str(), reply_cb, &request_id); if (result) { out[kRequestId] = picojson::value(std::string(request_id)); @@ -958,7 +956,7 @@ void MediaControllerInstance::MediaControllerClientSendEventReply(const picojson picojson::object& out) { ScopeLogger(); if (!client_) { - LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out, + LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occurred."), &out, ("Failed: client_")); return; } @@ -985,7 +983,7 @@ void MediaControllerInstance::MediaControllerClientSetCustomEventListener( const picojson::value& args, picojson::object& out) { ScopeLogger(); if (!client_) { - LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out, + LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occurred."), &out, ("Failed: client_")); return; } @@ -1017,7 +1015,7 @@ void MediaControllerInstance::MediaControllerClientUnsetCustomEventListener( const picojson::value& args, picojson::object& out) { ScopeLogger(); if (!client_) { - LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occured."), &out, + LogAndReportError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Unknown error occurred."), &out, ("Failed: client_")); return; } diff --git a/src/mediacontroller/mediacontroller_server.cc b/src/mediacontroller/mediacontroller_server.cc index 28c21ee..a33b071 100644 --- a/src/mediacontroller/mediacontroller_server.cc +++ b/src/mediacontroller/mediacontroller_server.cc @@ -35,6 +35,14 @@ using common::PlatformResult; MediaControllerServer::MediaControllerServer() : handle_(nullptr), + change_request_playback_info_listener_(nullptr), + event_reply_callback_(nullptr), + command_listener_(nullptr), + search_request_listener_(nullptr), + subtitles_change_request_listener_(nullptr), + mode360_change_request_listener_(nullptr), + display_mode_change_request_listener_(nullptr), + display_rotation_change_request_listener_(nullptr), playback_state_(MC_PLAYBACK_STATE_STOPPED), position_(0ULL), age_rating_(MC_CONTENT_RATING_ALL), @@ -1071,7 +1079,7 @@ void MediaControllerServer::OnEventReply(const char* client_name, const char* re picojson::value json_data = picojson::value(picojson::object()); auto& json_data_obj = json_data.get(); - json_data_obj[kResultCode] = picojson::value(static_cast(result_code)); + json_data_obj[kCode] = picojson::value(static_cast(result_code)); json_data_obj[kClientName] = picojson::value(std::string(client_name)); json_data_obj[kRequestId] = picojson::value(std::string(request_id)); @@ -1473,8 +1481,13 @@ PlatformResult MediaControllerServer::SendEvent(const char* event_name, ScopeLogger(); bundle* event_data_bundle = bundle_create(); + if (!event_data_bundle) { + LoggerE("failed to create bundle object"); + return PlatformResult(ErrorCode::UNKNOWN_ERR, "failed to create bundle object"); + } + SCOPE_EXIT { - free(event_data_bundle); + bundle_free(event_data_bundle); }; PlatformResult result = common::JsonToBundle(event_data, &event_data_bundle); diff --git a/src/mediacontroller/mediacontroller_server.h b/src/mediacontroller/mediacontroller_server.h index 8cd88c4..421847e 100644 --- a/src/mediacontroller/mediacontroller_server.h +++ b/src/mediacontroller/mediacontroller_server.h @@ -101,6 +101,12 @@ class MediaControllerServer { JsonCallback change_request_playback_info_listener_; JsonCallback event_reply_callback_; + JsonCallback command_listener_; + JsonCallback search_request_listener_; + JsonCallback subtitles_change_request_listener_; + JsonCallback mode360_change_request_listener_; + JsonCallback display_mode_change_request_listener_; + JsonCallback display_rotation_change_request_listener_; mc_playback_states_e playback_state_; unsigned long long position_; @@ -112,9 +118,7 @@ class MediaControllerServer { bool is_repeat_mode_set_; std::map abilities_; - JsonCallback command_listener_; std::map playlist_handle_map_; - JsonCallback search_request_listener_; static void OnPlaybackActionCommand(const char* client_name, const char* request_id, mc_playback_action_e action, void* user_data); @@ -128,28 +132,20 @@ class MediaControllerServer { const char* playlist_name, const char* index, mc_playback_action_e action, unsigned long long position, void* user_data); - static void OnEventReply(const char* client_name, const char* request_id, - int result_code, bundle* data, void* user_data); + static void OnEventReply(const char* client_name, const char* request_id, int result_code, + bundle* data, void* user_data); static void OnSearchRequestReceived(const char* client_name, const char* request_id, mc_search_h request, void* user_data); static void OnCommandReceived(const char* client_name, const char* request_id, const char* command, bundle* data, void* user_data); - // subtitles - JsonCallback subtitles_change_request_listener_; static void OnSubtitlesChangeCommand(const char* client_name, const char* request_id, bool enabled, void* user_data); - // mode360 - JsonCallback mode360_change_request_listener_; static void OnMode360ChangeCommand(const char* client_name, const char* request_id, bool enabled, void* user_data); - // displayMode - JsonCallback display_mode_change_request_listener_; static void OnDisplayModeChangeCommand(const char* client_name, const char* request_id, mc_display_mode_e type, void* user_data); - // displayRotation - JsonCallback display_rotation_change_request_listener_; static void OnDisplayRotationChangeCommand(const char* client_name, const char* request_id, mc_display_rotation_e type, void* user_data); }; -- 2.7.4