1 /* 2 * Copyright (C) 2015, The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include "tests/test_data.h" 18 19 namespace android { 20 namespace aidl { 21 namespace test_data { 22 namespace ping_responder { 23 24 const char kCanonicalName[] = "android.os.IPingResponder"; 25 const char kInterfaceDefinition[] = R"( 26 package android.os; 27 28 import bar.Unused; 29 30 interface IPingResponder { 31 String Ping(String input); 32 33 @nullable 34 String NullablePing(@nullable String input); 35 36 @utf8InCpp 37 String Utf8Ping(@utf8InCpp String input); 38 39 @utf8InCpp @nullable 40 String NullableUtf8Ping(@utf8InCpp @nullable String input); 41 } 42 )"; 43 44 const char kCppOutputPath[] = "some/path/to/output.cpp"; 45 46 const char kCppParcelableHeader[] = "cpp-header-str"; 47 48 const char* kImportedParcelables[] = { 49 "bar.Unused", 50 nullptr, 51 }; 52 53 const char* kImportedInterfaces[] = { 54 nullptr, 55 }; 56 57 const char kGenHeaderDir[] = "some/path"; 58 const char kGenInterfaceHeaderPath[] = "some/path/android/os/IPingResponder.h"; 59 const char kGenClientHeaderPath[] = "some/path/android/os/BpPingResponder.h"; 60 const char kGenServerHeaderPath[] = "some/path/android/os/BnPingResponder.h"; 61 62 const char kExpectedCppDepsOutput[] = 63 R"(some/path/to/output.cpp : \ 64 android/os/IPingResponder.aidl \ 65 ./bar/Unused.aidl 66 67 android/os/IPingResponder.aidl : 68 ./bar/Unused.aidl : 69 70 some/path/android/os/BpPingResponder.h \ 71 some/path/android/os/BnPingResponder.h \ 72 some/path/android/os/IPingResponder.h : \ 73 android/os/IPingResponder.aidl \ 74 ./bar/Unused.aidl 75 )"; 76 77 const char kExpectedCppOutput[] = 78 R"(#include <android/os/IPingResponder.h> 79 #include <android/os/BpPingResponder.h> 80 81 namespace android { 82 83 namespace os { 84 85 IMPLEMENT_META_INTERFACE(PingResponder, "android.os.IPingResponder") 86 87 } // namespace os 88 89 } // namespace android 90 #include <android/os/BpPingResponder.h> 91 #include <binder/Parcel.h> 92 93 namespace android { 94 95 namespace os { 96 97 BpPingResponder::BpPingResponder(const ::android::sp<::android::IBinder>& _aidl_impl) 98 : BpInterface<IPingResponder>(_aidl_impl){ 99 } 100 101 ::android::binder::Status BpPingResponder::Ping(const ::android::String16& input, ::android::String16* _aidl_return) { 102 ::android::Parcel _aidl_data; 103 ::android::Parcel _aidl_reply; 104 ::android::status_t _aidl_ret_status = ::android::OK; 105 ::android::binder::Status _aidl_status; 106 _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor()); 107 if (((_aidl_ret_status) != (::android::OK))) { 108 goto _aidl_error; 109 } 110 _aidl_ret_status = _aidl_data.writeString16(input); 111 if (((_aidl_ret_status) != (::android::OK))) { 112 goto _aidl_error; 113 } 114 _aidl_ret_status = remote()->transact(IPingResponder::PING, _aidl_data, &_aidl_reply); 115 if (((_aidl_ret_status) != (::android::OK))) { 116 goto _aidl_error; 117 } 118 _aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply); 119 if (((_aidl_ret_status) != (::android::OK))) { 120 goto _aidl_error; 121 } 122 if (!_aidl_status.isOk()) { 123 return _aidl_status; 124 } 125 _aidl_ret_status = _aidl_reply.readString16(_aidl_return); 126 if (((_aidl_ret_status) != (::android::OK))) { 127 goto _aidl_error; 128 } 129 _aidl_error: 130 _aidl_status.setFromStatusT(_aidl_ret_status); 131 return _aidl_status; 132 } 133 134 ::android::binder::Status BpPingResponder::NullablePing(const ::std::unique_ptr<::android::String16>& input, ::std::unique_ptr<::android::String16>* _aidl_return) { 135 ::android::Parcel _aidl_data; 136 ::android::Parcel _aidl_reply; 137 ::android::status_t _aidl_ret_status = ::android::OK; 138 ::android::binder::Status _aidl_status; 139 _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor()); 140 if (((_aidl_ret_status) != (::android::OK))) { 141 goto _aidl_error; 142 } 143 _aidl_ret_status = _aidl_data.writeString16(input); 144 if (((_aidl_ret_status) != (::android::OK))) { 145 goto _aidl_error; 146 } 147 _aidl_ret_status = remote()->transact(IPingResponder::NULLABLEPING, _aidl_data, &_aidl_reply); 148 if (((_aidl_ret_status) != (::android::OK))) { 149 goto _aidl_error; 150 } 151 _aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply); 152 if (((_aidl_ret_status) != (::android::OK))) { 153 goto _aidl_error; 154 } 155 if (!_aidl_status.isOk()) { 156 return _aidl_status; 157 } 158 _aidl_ret_status = _aidl_reply.readString16(_aidl_return); 159 if (((_aidl_ret_status) != (::android::OK))) { 160 goto _aidl_error; 161 } 162 _aidl_error: 163 _aidl_status.setFromStatusT(_aidl_ret_status); 164 return _aidl_status; 165 } 166 167 ::android::binder::Status BpPingResponder::Utf8Ping(const ::std::string& input, ::std::string* _aidl_return) { 168 ::android::Parcel _aidl_data; 169 ::android::Parcel _aidl_reply; 170 ::android::status_t _aidl_ret_status = ::android::OK; 171 ::android::binder::Status _aidl_status; 172 _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor()); 173 if (((_aidl_ret_status) != (::android::OK))) { 174 goto _aidl_error; 175 } 176 _aidl_ret_status = _aidl_data.writeUtf8AsUtf16(input); 177 if (((_aidl_ret_status) != (::android::OK))) { 178 goto _aidl_error; 179 } 180 _aidl_ret_status = remote()->transact(IPingResponder::UTF8PING, _aidl_data, &_aidl_reply); 181 if (((_aidl_ret_status) != (::android::OK))) { 182 goto _aidl_error; 183 } 184 _aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply); 185 if (((_aidl_ret_status) != (::android::OK))) { 186 goto _aidl_error; 187 } 188 if (!_aidl_status.isOk()) { 189 return _aidl_status; 190 } 191 _aidl_ret_status = _aidl_reply.readUtf8FromUtf16(_aidl_return); 192 if (((_aidl_ret_status) != (::android::OK))) { 193 goto _aidl_error; 194 } 195 _aidl_error: 196 _aidl_status.setFromStatusT(_aidl_ret_status); 197 return _aidl_status; 198 } 199 200 ::android::binder::Status BpPingResponder::NullableUtf8Ping(const ::std::unique_ptr<::std::string>& input, ::std::unique_ptr<::std::string>* _aidl_return) { 201 ::android::Parcel _aidl_data; 202 ::android::Parcel _aidl_reply; 203 ::android::status_t _aidl_ret_status = ::android::OK; 204 ::android::binder::Status _aidl_status; 205 _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor()); 206 if (((_aidl_ret_status) != (::android::OK))) { 207 goto _aidl_error; 208 } 209 _aidl_ret_status = _aidl_data.writeUtf8AsUtf16(input); 210 if (((_aidl_ret_status) != (::android::OK))) { 211 goto _aidl_error; 212 } 213 _aidl_ret_status = remote()->transact(IPingResponder::NULLABLEUTF8PING, _aidl_data, &_aidl_reply); 214 if (((_aidl_ret_status) != (::android::OK))) { 215 goto _aidl_error; 216 } 217 _aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply); 218 if (((_aidl_ret_status) != (::android::OK))) { 219 goto _aidl_error; 220 } 221 if (!_aidl_status.isOk()) { 222 return _aidl_status; 223 } 224 _aidl_ret_status = _aidl_reply.readUtf8FromUtf16(_aidl_return); 225 if (((_aidl_ret_status) != (::android::OK))) { 226 goto _aidl_error; 227 } 228 _aidl_error: 229 _aidl_status.setFromStatusT(_aidl_ret_status); 230 return _aidl_status; 231 } 232 233 } // namespace os 234 235 } // namespace android 236 #include <android/os/BnPingResponder.h> 237 #include <binder/Parcel.h> 238 239 namespace android { 240 241 namespace os { 242 243 ::android::status_t BnPingResponder::onTransact(uint32_t _aidl_code, const ::android::Parcel& _aidl_data, ::android::Parcel* _aidl_reply, uint32_t _aidl_flags) { 244 ::android::status_t _aidl_ret_status = ::android::OK; 245 switch (_aidl_code) { 246 case Call::PING: 247 { 248 ::android::String16 in_input; 249 ::android::String16 _aidl_return; 250 if (!(_aidl_data.checkInterface(this))) { 251 _aidl_ret_status = ::android::BAD_TYPE; 252 break; 253 } 254 _aidl_ret_status = _aidl_data.readString16(&in_input); 255 if (((_aidl_ret_status) != (::android::OK))) { 256 break; 257 } 258 ::android::binder::Status _aidl_status(Ping(in_input, &_aidl_return)); 259 _aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply); 260 if (((_aidl_ret_status) != (::android::OK))) { 261 break; 262 } 263 if (!_aidl_status.isOk()) { 264 break; 265 } 266 _aidl_ret_status = _aidl_reply->writeString16(_aidl_return); 267 if (((_aidl_ret_status) != (::android::OK))) { 268 break; 269 } 270 } 271 break; 272 case Call::NULLABLEPING: 273 { 274 ::std::unique_ptr<::android::String16> in_input; 275 ::std::unique_ptr<::android::String16> _aidl_return; 276 if (!(_aidl_data.checkInterface(this))) { 277 _aidl_ret_status = ::android::BAD_TYPE; 278 break; 279 } 280 _aidl_ret_status = _aidl_data.readString16(&in_input); 281 if (((_aidl_ret_status) != (::android::OK))) { 282 break; 283 } 284 ::android::binder::Status _aidl_status(NullablePing(in_input, &_aidl_return)); 285 _aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply); 286 if (((_aidl_ret_status) != (::android::OK))) { 287 break; 288 } 289 if (!_aidl_status.isOk()) { 290 break; 291 } 292 _aidl_ret_status = _aidl_reply->writeString16(_aidl_return); 293 if (((_aidl_ret_status) != (::android::OK))) { 294 break; 295 } 296 } 297 break; 298 case Call::UTF8PING: 299 { 300 ::std::string in_input; 301 ::std::string _aidl_return; 302 if (!(_aidl_data.checkInterface(this))) { 303 _aidl_ret_status = ::android::BAD_TYPE; 304 break; 305 } 306 _aidl_ret_status = _aidl_data.readUtf8FromUtf16(&in_input); 307 if (((_aidl_ret_status) != (::android::OK))) { 308 break; 309 } 310 ::android::binder::Status _aidl_status(Utf8Ping(in_input, &_aidl_return)); 311 _aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply); 312 if (((_aidl_ret_status) != (::android::OK))) { 313 break; 314 } 315 if (!_aidl_status.isOk()) { 316 break; 317 } 318 _aidl_ret_status = _aidl_reply->writeUtf8AsUtf16(_aidl_return); 319 if (((_aidl_ret_status) != (::android::OK))) { 320 break; 321 } 322 } 323 break; 324 case Call::NULLABLEUTF8PING: 325 { 326 ::std::unique_ptr<::std::string> in_input; 327 ::std::unique_ptr<::std::string> _aidl_return; 328 if (!(_aidl_data.checkInterface(this))) { 329 _aidl_ret_status = ::android::BAD_TYPE; 330 break; 331 } 332 _aidl_ret_status = _aidl_data.readUtf8FromUtf16(&in_input); 333 if (((_aidl_ret_status) != (::android::OK))) { 334 break; 335 } 336 ::android::binder::Status _aidl_status(NullableUtf8Ping(in_input, &_aidl_return)); 337 _aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply); 338 if (((_aidl_ret_status) != (::android::OK))) { 339 break; 340 } 341 if (!_aidl_status.isOk()) { 342 break; 343 } 344 _aidl_ret_status = _aidl_reply->writeUtf8AsUtf16(_aidl_return); 345 if (((_aidl_ret_status) != (::android::OK))) { 346 break; 347 } 348 } 349 break; 350 default: 351 { 352 _aidl_ret_status = ::android::BBinder::onTransact(_aidl_code, _aidl_data, _aidl_reply, _aidl_flags); 353 } 354 break; 355 } 356 if (_aidl_ret_status == ::android::UNEXPECTED_NULL) { 357 _aidl_ret_status = ::android::binder::Status::fromExceptionCode(::android::binder::Status::EX_NULL_POINTER).writeToParcel(_aidl_reply); 358 } 359 return _aidl_ret_status; 360 } 361 362 } // namespace os 363 364 } // namespace android 365 )"; 366 367 const char kExpectedIHeaderOutput[] = 368 R"(#ifndef AIDL_GENERATED_ANDROID_OS_I_PING_RESPONDER_H_ 369 #define AIDL_GENERATED_ANDROID_OS_I_PING_RESPONDER_H_ 370 371 #include <binder/IBinder.h> 372 #include <binder/IInterface.h> 373 #include <binder/Status.h> 374 #include <memory> 375 #include <string> 376 #include <utils/String16.h> 377 #include <utils/StrongPointer.h> 378 379 namespace android { 380 381 namespace os { 382 383 class IPingResponder : public ::android::IInterface { 384 public: 385 DECLARE_META_INTERFACE(PingResponder) 386 virtual ::android::binder::Status Ping(const ::android::String16& input, ::android::String16* _aidl_return) = 0; 387 virtual ::android::binder::Status NullablePing(const ::std::unique_ptr<::android::String16>& input, ::std::unique_ptr<::android::String16>* _aidl_return) = 0; 388 virtual ::android::binder::Status Utf8Ping(const ::std::string& input, ::std::string* _aidl_return) = 0; 389 virtual ::android::binder::Status NullableUtf8Ping(const ::std::unique_ptr<::std::string>& input, ::std::unique_ptr<::std::string>* _aidl_return) = 0; 390 enum Call { 391 PING = ::android::IBinder::FIRST_CALL_TRANSACTION + 0, 392 NULLABLEPING = ::android::IBinder::FIRST_CALL_TRANSACTION + 1, 393 UTF8PING = ::android::IBinder::FIRST_CALL_TRANSACTION + 2, 394 NULLABLEUTF8PING = ::android::IBinder::FIRST_CALL_TRANSACTION + 3, 395 }; 396 }; // class IPingResponder 397 398 } // namespace os 399 400 } // namespace android 401 402 #endif // AIDL_GENERATED_ANDROID_OS_I_PING_RESPONDER_H_ 403 )"; 404 405 const char kExpectedBpHeaderOutput[] = 406 R"(#ifndef AIDL_GENERATED_ANDROID_OS_BP_PING_RESPONDER_H_ 407 #define AIDL_GENERATED_ANDROID_OS_BP_PING_RESPONDER_H_ 408 409 #include <binder/IBinder.h> 410 #include <binder/IInterface.h> 411 #include <utils/Errors.h> 412 #include <android/os/IPingResponder.h> 413 414 namespace android { 415 416 namespace os { 417 418 class BpPingResponder : public ::android::BpInterface<IPingResponder> { 419 public: 420 explicit BpPingResponder(const ::android::sp<::android::IBinder>& _aidl_impl); 421 virtual ~BpPingResponder() = default; 422 ::android::binder::Status Ping(const ::android::String16& input, ::android::String16* _aidl_return) override; 423 ::android::binder::Status NullablePing(const ::std::unique_ptr<::android::String16>& input, ::std::unique_ptr<::android::String16>* _aidl_return) override; 424 ::android::binder::Status Utf8Ping(const ::std::string& input, ::std::string* _aidl_return) override; 425 ::android::binder::Status NullableUtf8Ping(const ::std::unique_ptr<::std::string>& input, ::std::unique_ptr<::std::string>* _aidl_return) override; 426 }; // class BpPingResponder 427 428 } // namespace os 429 430 } // namespace android 431 432 #endif // AIDL_GENERATED_ANDROID_OS_BP_PING_RESPONDER_H_ 433 )"; 434 435 const char kExpectedBnHeaderOutput[] = 436 R"(#ifndef AIDL_GENERATED_ANDROID_OS_BN_PING_RESPONDER_H_ 437 #define AIDL_GENERATED_ANDROID_OS_BN_PING_RESPONDER_H_ 438 439 #include <binder/IInterface.h> 440 #include <android/os/IPingResponder.h> 441 442 namespace android { 443 444 namespace os { 445 446 class BnPingResponder : public ::android::BnInterface<IPingResponder> { 447 public: 448 ::android::status_t onTransact(uint32_t _aidl_code, const ::android::Parcel& _aidl_data, ::android::Parcel* _aidl_reply, uint32_t _aidl_flags = 0) override; 449 }; // class BnPingResponder 450 451 } // namespace os 452 453 } // namespace android 454 455 #endif // AIDL_GENERATED_ANDROID_OS_BN_PING_RESPONDER_H_ 456 )"; 457 458 } // namespace ping_responder 459 } // namespace test_data 460 } // namespace aidl 461 } // namespace android 462